题目描述
在1742年,德国的一位业余数学家哥德巴赫给欧拉写信,在信中给出了如下猜想:
任何一个大于4的偶数,都可以写成两个素数之和;
这个被誉为“数学皇冠上的明珠”的定理到现在都还没有被证明或证伪,自然激起了yuman的极大兴趣,他现在想通过编程来验证该猜想在小范围里的正确性,你能帮帮他吗?
输入
先输入一个正整数T,表示有T组样例(1<=T<=1000)
对于每一个测试样例,输入一个正整数n (6<=n<=100000,且n为偶数)
输出
对于每个测试样例,如果存在这样的两个素数a,b,则按升序输出两个素数,中间以一个空格分隔,另外,如果这样的a,b有多对满足,则输出(b-a)最大的那对;
如果不存在这样的素数,则输出"Wrong"(不包括引号)
样例输入
2
8
20
样例输出
3 5
调试了好长时间,代码也改了又改,外观和代码量也有所改善。
后来发现是循环控制条件的问题,改过来就好了。
当时机房快关门了,真是很想做出来,提交出现AC的时候真是很高兴。
#include<stdio.h> #include<math.h> int Prime(int x) { int i,m; //质数判断简写化 m = floor(sqrt(x) + 0.5);//+0.5以避免浮点数的陷阱 for(i = 2;i <= m; ++i)// 初等数论知识:一个整数不能整除他的平方数之内的整数就是素数 if(x % i == 0) return 0; return 1; } int main() { int m; scanf("%d",&m); lo: while(m--) { int n; scanf("%d",&n); if(n==6) { printf("3 3 "); } else if(Prime(n-2)) { printf("%d %d ",2,n-2); } else { for(int i=3;i<=n/2;i+=2) { int a,b; if(Prime(i)&&Prime(n-i)) { a=i; b=n-i; printf("%d %d ",a,b); goto lo; } } } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。