关于数论:数论专题寻找素数对ab-cd

寻找素数对哥德巴赫猜想大家都晓得一点吧.咱们当初不是想证实这个论断,而是想在程序语言外部可能示意的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.做好了这件实事,就能阐明这个猜测是成立的.因为能够有不同的素数对来示意同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.Input输出中是一些偶整数M(5<M<=10000).Output对于每个偶数,输入两个彼此最靠近的素数,其和等于该偶数.Sample Input20 30 40Sample Output7 1313 1717 23 //(数论素数(欧拉筛,埃氏筛)#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<cstdio>#include<queue>#include<stack> #include<set> #include<vector> using namespace std;int n,a[10005];//标记数组 int main(){ for(int i = 1; i <= 10000; i++){//打表标记素数标记数组a[],1示意是素数,0代表不是 a[i] = 1; for(int j = 2; j * j <= i; j++){ if(i % j == 0){ a[i] = 0; break; } } } while(scanf("%d",&n) != EOF){ for(int i = n/2; i > 0; i--){//从两头向两边开始遍历,第一个无效素数对的两个值肯定最相进 if(a[i] == 1 && a[n - i] == 1){ printf("%d %d\n",i,n - i); break; } } } return 0;} ...

April 28, 2021 · 1 min · jiezi

关于数论:排版CI-叠筐数论CJ-互质查找CK-赌徒基础上机试题

CI 叠筐把一个个大小差一圈的筐叠下来,使得从上往下看时,边筐花色交织。这个工作当初要让计算机来实现,得看你的了。 输出输出是一个个的三元组,别离是,外筐尺寸n(n为满足0<n<80的奇整数),核心花色字符,外筐花色字符,后二者都为ASCII可见字符; 输入输入叠在一起的筐图案,核心花色与外筐花色字符从内层起交织相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行距离。 样例输出5 ^ !7 ( )0样例输入(图形显示谬误,应为突围状仿圆形筐形,花纹由内而外按层交织散布) ^^^ ^!!!^^!^!^^!!!^ ^^^ ))))) )((((())()))())()()())()))())((((() ))))) //#include<iostream>//#include<algorithm>//#include<cstring>//#include<cmath>//using namespace std;///*// 用一个缓存数组示意要输入的字符序列。阵列的左上角为(1,1),右下角为(n,n)。由内到外实现排版。// 最内层的横坐标是(n+1)/2//而后向上遍历 到1为止//记 k 为以后地位的横坐标 那么每一行须要打印的字符个数为从 k 到 n-k+1//*///int main(){// int n = 0;// int a[81][81];// char cen,out,cc; //cen:核心字符 out:外围字符,cc:暂存备用字符 // while(scanf("%d %c %c",&n,&cen,&out)!=EOF){// if(n == 0){// break;// } // int k = (n + 1 ) / 2;//找到最核心的地位 // int count = 0;//计数用,偶数用cen(核心字符)填充(从count从0开始),奇数用外围out填充 // for(int i = k; i >= 1; i--){//横纵坐标均从1 开始 // if(count % 2 == 0){//用count奇偶来判断填充哪个字符 // cc = cen; // }else{// cc = out;// }// for(int j = i; j <= n - i + 1 ; j++){//n - i + 1为与 i 对称地位的坐标 // a[i][j] = a[n - i + 1][j] = cc; //随j的变动横向→纵列↓填充// a[j][i] = a[j][n - i + 1] = cc; //随j的变动纵向↓横列→填充 // }// count++;//计数器记录 // }// if(n != 1){//不是只有一个筐的状况下,每个角都要被赋值为空格' ' // a[1][1] = a[1][n] = a[n][1] = a[n][n] = ' ';//四个角置空格 // }// for(int i = 1; i <= n; i++){// for(int j = 1; j <= n; j++){// printf("%c",a[i][j]);// }// printf("\n");// }// printf("\n");// }// return 0;//} ...

April 28, 2021 · 3 min · jiezi

关于数论:数论矩阵快速幂-CH-Tr-A复试上机试题

A为一个方阵,则Tr A示意A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。 输出数据的第一行是一个T,示意有T组数据。每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范畴是[0,9],示意方阵A的内容。 输入对应每组数据,输入Tr(A^k)%9973。 样例输出 Copy31 427 2 63350 9 4 8 3 293592 4 5 5 1 7 1 1 5 样例输入 Copy396955105473 参考https://www.cnblogs.com/cmmdc... //#include<iostream>//#include<algorithm>//#include<cstring>//#include<string.h>//#include<cmath>//#include <cstdlib>//using namespace std;///*// //*///typedef struct Node{// int m[11][11];//}Matrix;//创立一个矩阵构造体 //Matrix init;//定义一个构造体变量来存输出的数据//Matrix unit; //int n,k;//n方阵的行列数,k为要求的方阵的迹的幂值(^k),均为全局变量 //void Init(){//没有参数的函数 1,返回值类型 函数名(void)2, 返回值类型 函数名()// scanf("%d %d",&n,&k);// for(int i = 0; i < n; i++){// for(int j = 0; j < n; j++){// scanf("%d",&init.m[i][j]);// unit.m[i][j] = (i == j);// }// }//}//Matrix Mul(Matrix a, Matrix b){// Matrix c;// for( int i = 0; i < n; ++i){// for( int j = 0; j < n; ++j){// c.m[i][j] = 0;//置长期矩阵初值为空(0)// for( int k = 0; k < n; ++k){// c.m[i][j] += a.m[i][k]*b.m[k][j];//计算新矩阵的每一个想乘的值 // } // c.m[i][j] %= 9973;// }// }// return c;//} //Matrix Pow(Matrix a,Matrix b,int k){//矩阵疾速幂,k为幂指数////Matrix Pow(Matrix a,int k){//矩阵疾速幂,k为幂指数//// Matrix b;//定义一个作为单位矩阵//// memset(b.m,0,sizeof(b.m));//初始化输出矩阵void *memset(void *s, int c, size_t n); //// //memset:作用是在一段内存块中填充某个给定的值,它对较大的构造体或数组进行清零操作的一种最快办法//// for(int i = 0; i < n; i++){//// for(int j = 0; j < n; j++){//// if(i == j){//// b.m[i][j] = 1;//单位矩阵对角线值为1//// }else{//// b.m[i][j] = 0;//// }//// }//// } // while(k){//矩阵疾速幂 // if(k&1){//位运算k的二进制与1的二进制(00000001)相与,都为1才为ture,其实就是判断为奇数 乘上矩阵a // b = Mul(b,a);//此处疾速幂模板,参考第一行blog // }//k的二进制最初一位是0,即为偶数 将矩阵a平方// a = Mul(a,a);// k >>= 1;//位运算,k的二进制右移一位,相当于 k = k >> 1;如8二进制数为00001000,进行>>1右移一位后就是00000100// } // return b;//}//int main(){// int t = 0;// scanf("%d",&t);// while(t--){// Matrix x;//定义一个矩阵来接管疾速幂(Pow函数)的返回值矩阵// Init(); //// x = Pow(init,k);// x = Pow(init,unit,k);// int sum = 0;//计算迹的幂的和 // for(int i = 0; i < n; i++){// sum += x.m[i][i];// sum %= 9973;// } // printf("%d\n",sum);// }// return 0;//} ...

April 28, 2021 · 2 min · jiezi

关于数论:数论专题末CECG基础上机试题

CE: 求素数求0~N内的素数。(N<=100000) 输出N 输入[0~N]之间的所有素数,一个素数占一行。 样例输出 Copy100样例输入 Copy2357111317192329313741434753596167717379838997 //#include<iostream>//#include<algorithm>//#include<cstring>//#include<cmath>//using namespace std;///*// 思路1):因而判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。//思路2):另外判断办法还能够简化。m 不用被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 根号m 之间的每一个整数去除就能够了。//如果 m 不能被 2 ~ 间任一整数整除,m 必然是素数。例如判断 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,//因为都不能整除,能够断定 17 是素数。//起因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必然有一个小于或等于 ,另一个大于或等于 。//例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因而只需断定在 2~4 之间有无因子即可。//*///int main(){// int n = 0,k,j;// scanf("%d",&n); // bool f;// for(j = 2; j <= n; j++){// f = true;// k = (int)sqrt((double)j);//此处求根简化计算,只需使j与 2到 根号m 相除即可 // for(int i = 2; i <= k; i++){ //// for(int i = 2; i <= j - 1; i++){//这样也能够,使j与 2到j-1 相除 // if(j % i == 0){// f = false;// break;// }// }// if(f){// printf("%d\n",j);// } // }// return 0;//} ...

April 28, 2021 · 2 min · jiezi

关于数论:数论专题BZCD基础上机试题

BZ: 阶乘的和有些数能够示意成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你通知他这个数是否能够示意成若干个不同阶乘的和。输出输出蕴含多组测试数据。每组输出为一个非负整数n(n<=1000000),当n为正数时,输出完结。输入对于每组输出,如果n能够示意成若干个不同阶乘的和,则输入YES,否则输入NO。样例输出 Copy9-1样例输入 CopyYES //http://www.voidcn.com/article/p-pfvdxemp-bqa.html#include<iostream>#include<algorithm>#include<string>#include<string.h>using namespace std;//10的阶乘等于362 8800 > 100 0000 ,9! = 362 880 < 1000000int main(){ int t = 0; int a[10] = {1,1,2,6,24,120,720,5040,40320,362880};//寄存0-9各个数字的阶乘 while(scanf("%d",&t), t >= 0){ if(t == 0){ printf("NO\n"); }else{ for(int i = 9; i >= 0; i--){ if(t >= a[i]){ t -= a[i];//向越来越小的阶乘循环求证失去的差是否用更小的阶乘示意 } } if( t == 0){//如果最初做差等于0,示意刚好被若干个阶乘齐全示意 printf("YES\n"); }else{//否则不满足条件 printf("NO\n"); } } } return 0;} CA: 大数取模现给你两个正整数A和B,请你计算A mod B。为了使问题简略,保障B小于100000。输出输出蕴含多组测试数据。每行输出蕴含两个正整数A和B。A的长度不超过1000,并且0<B<100000。输入对于每一个测试样例,输入A mod B。样例输出 Copy2 312 7152455856554521 3250样例输入 Copy251521 ...

April 28, 2021 · 4 min · jiezi

关于数论:数论专题BTBY基础上机试题

BT: 漂亮数小明很喜爱3和5这两个数字,他将能被3或5整除的数叫做漂亮数。当初给你一个整数N(1<=N<=100000),你能通知小明第N个漂亮数是多少吗?提醒 本题须要打表优化参考代码:https://paste.ubuntu.com/p/th...输出输出蕴含多组测试数据。每组输出一个整数N(1<=N<=100000)。输入对于每组输出,输入第N个漂亮数。样例输出 Copy1234样例输入 Copy3569 //#include<iostream>//#include<algorithm>//#include<string>//#include<string.h>//using namespace std;////int main(){// int n = 0;// int a[100005];// int count = 1;// for(int i = 1;; i++){//须要应用数组先把对应的丑陋数存下来而后前面间接拜访数组下标即可,要不查找时工夫会超限 // if(i % 3 == 0 || i % 5 == 0){// a[count] = i;// count ++;// }// if(count > 100000){// break;// }// }// while(scanf("%d",&n) != EOF){// printf("%d\n",a[n]);// }// return 0;//} BU: 一个数学问题给你两个整数n和m,请你计算有多少个整数对(a,b)满足以下条件:当0<a<b<n时,(a^2+b^2+m)/(ab)是一个整数。输出输出蕴含多组测试数据。每组输出为两个整数n和m(0<n<=100),当n=m=0时,输出完结。输入对于每组输出,输入样例标号和满足要求的整数对的个数。样例输出 Copy10 120 330 40 0样例输入 CopyCase 1: 2Case 2: 4Case 3: 5 ...

April 28, 2021 · 3 min · jiezi

关于数论:数论专题BJBN基础上机试题

BJ: 分数矩阵咱们定义如下矩阵:1/1 1/2 1/31/2 1/1 1/21/3 1/2 1/1矩阵对角线上的元素始终是1/1,对角线两边分数的分母一一递增。申请出这个矩阵的总和。输出输出蕴含多组测试数据。每行给定整数N(N<50000),示意矩阵为N*N。当N=0时,输出完结。输入输入答案,后果保留2位小数。样例输出 Copy12340样例输入 Copy1.003.005.678.83 //#include<iostream>//#include<algorithm>//#include<string>//#include<string.h>//using namespace std;////int main(){// int n = 0;// while(scanf("%d",&n) != EOF){// if( n == 0){// break;// }// double sum = n;// for(int i = 2; i <= n; i++){// sum += 2 * (1.00 / i) * (n - i + 1);// }// printf("%.2f\n",sum);// }// return 0;//} BK: 计算并集给你两个汇合,要求{A} + {B}。注:同一个汇合中不会有两个雷同的元素。输出每组输出数据分为三行,第一行有两个数字n,m(0<n,m<=10000),别离示意汇合A和汇合B的元素个数。后两行别离示意汇合A和汇合B。每个元素为不超出int范畴的整数,每个元素之间有一个空格隔开。输入针对每组数据输入一行数据,示意合并后的汇合,要求从小到大输入,每个元素之间有一个空格隔开。样例输出 Copy1 212 31 211 2样例输入 Copy1 2 31 2 ...

April 28, 2021 · 3 min · jiezi