- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四个素数之和问题
问题描述:欧拉证明素数有无穷多个。但每个整数能表示成4个素数之和吗?输入:每行输入一个整数N(N=10 000 000),它是你需要把它表示成4个素数之和的数。输出:对于每个输入行都有一个输出行,每行包含符合要求的4个素数。如果该素数不能表示为4个素数之和,那么输出一行不能。也可能有很多组解,任何合理的解都将被接受。输入样例:输出样例:24 3 11 3 7363 7 13 134611 11 17 7代码:#includectime#includemath.h#includeiostreamusingnamespace std;constint MAXLEN=10001;long modular_power1(long a,long r,long m)//求模幂a^r mod m的值{long d,t;d=1;t=a;while(r0){if((r%2)==1)d=(d*t)%m;r/=2;t=t*t%m;}return d;}//素数测试算法代码(Miller-Rabin素数测试算法)bool Miller_Rabin(longlong a,longlong n){longlong d,t,bitnum,bit;bit=130;bitnum=n-1;while((bitbitnum)==0)bit=bit1;d=1;while(bit0){t=d;d=(d*d)%n;if((d==1)(t!=1)(t!=n-1))returntrue;if((bitbitnum)!=0)d=(d*a)%n;bit=bit1;}if(d!=1)returntrue;returnfalse;}void G_maini(int n,int *a,int *b)//用到上面的素数测试算法,此函数用来验证哥德巴赫猜想(每个大//于4的偶数都可以写成两个奇素数之和){int a1,a2,b1,b2,k;if((n3)||(n%2==1))coutErrorendl;elseif(n==4||n==6){*a=n/2;*b=n/2;}elseif(n==8){*a=3;*b=5;}elseif(n==10){*a=3;*b=7;}else{srand(time(NULL));for(k=3;k=n/2;k=k+2)//取奇数k作为素数测试的对象{if(k==3)//3是素数,测试n-3是否为素数{a1=1;while((a1==1)||(a1=n-k-1))a1=(int(rand()%(n-k))+1);//随机选取a1if(Miller_Rabin(a1,n-k))continue;//第次Miller_Rabin素数测试else{b1=1;while((b1==1)||(b1=n-k-1)||b1==a1)b1=(int(rand()%(n-k))+1);//随机选取b1if(Miller_Rabin(b1,n-k))continue;//第次Miller_Rabin素数测试else{*a=k;*b=n-k;break;}}}else{a1=1;a2=1;while((a1==1)||(a1=k-1))a1=(int(rand()%k)+1);//随机选取a1while((a2==1)||(a2=n-k-1))a2=(int(rand()%(n-k))+1);//随机选取a2if(Miller_Rabin(a1,k)||Miller_Rabin(a2,n-k))continue;//第次Miller_Rabin素数测试else{b1=1;b2=1;while((b1==1)||(b1=k-1)||b1==a1)b1=(int(rand()%k)+1);//随机选取b1while((b2==1)||(b2=k-1)||b2==a1)b2=(int(rand()%(n-k))+1);//随机选取b2if(Miller_Rabin(b1,k)||Miller_Rabin(b2,n-k))continue;//第次Miller_Rabin素数测试else{*a=k;*b=n-k;break;}}}}}//return 0;}bool prime(int n)//判断n是否是素数,若是则返回true{int j;if(n==2)returntrue;if(n=1||n%2==0)returnfalse; j=3;while(j=int(sqrt(longdouble(n)))) {if(n%j==0)returnfalse; j+=2; } returntrue;}void OddNumber(int num,int *a,int *b,int *a1,int *a
文档评论(0)