您的位置:首页 > 编程语言 > Go语言

light OJ1259 - Goldbach`s Conjecture

2016-04-07 13:26 525 查看
1259 - Goldbach`s Conjecture

PDF (English)Statistics
Forum

Time Limit: 2 second(s) Memory Limit: 32 MB

Goldbach's conjecture is one of the oldest unsolved problems in number theory and in all of mathematics. It states:

Every even integer, greater than 2, can be expressed as the sum of two primes [1].

Now your task is to check whether this conjecture holds for integers up to 107.

Input

Input starts with an integer T (≤ 300), denoting the number of test cases.

Each case starts with a line containing an integer n (4 ≤ n ≤ 107, n is even).

Output

For each case, print the case number and the number of ways you can express n as sum of two primes. To be more specific, we want to find the number of (a, b) where

1) Both a and b are prime

2) a + b = n

3) a ≤ b

Sample Input

Output for Sample Input

2

6

4

Case 1: 1

Case 2: 1

Note

1. An integer is said to be prime, if it is divisible by exactly two different integers. First few primes are 2, 3, 5, 7, 11, 13, ...

PROBLEM SETTER: JANE ALAM JAN

代码:

#include<cstdio>
#include<cstring>
#define MA 10000100
bool fafe[MA];
int prim[1500000];
int main()
{

memset(fafe,true,sizeof(fafe));
for (int i=2;i<3300;i++)
{
if (fafe[i])
{
for (int j=i+i;j<10000010;j+=i)
fafe[j]=false;
}
}
fafe[1]=false;
int kk=0;
for (int i=2;i<MA;i++)
if (fafe[i])
prim[kk++]=i;
int n,p;scanf("%d",&n);
for (int ca=1;ca<=n;ca++)
{
scanf("%d",&p);
int ko=p/2;
int s=0;
for (int i=0;i<kk;i++)
{
if (prim[i]>ko)
break;
if (fafe[p-prim[i]])
s++;
}
printf("Case %d: %d\n",ca,s);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: