南邮 OJ 2064 哥德巴赫猜想

来源:互联网 发布:vfp 编程100以内的质数 编辑:程序博客网 时间:2024/06/13 07:33

哥德巴赫猜想

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 96            测试通过 : 40 

比赛描述

    在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
3 17

题目来源

yuman





#include<iostream>#define MAX_N 100001bool isPrime[MAX_N];int main(){int t,n,i,j;memset(isPrime,1,sizeof(isPrime));isPrime[0]=isPrime[1]=0;isPrime[2]=1;for(i=2;(i<<1)<MAX_N;i++){isPrime[i<<1] = 0;}for(i=3;i<MAX_N;i+=2){if(isPrime[i]){for(j=(i<<1);j<MAX_N;j+=i){isPrime[j] = 0;}}}scanf("%d",&t);while(t--){scanf("%d",&n);for(i=2;(i<<1)<=n;i++){if(isPrime[i] && isPrime[n-i]){break;}}if((i<<1)<=n){printf("%d %d\n",i,n-i);}else{printf("Wrong\n");}}}


0 0
原创粉丝点击