LightOJ

来源:互联网 发布:淘宝名字怎么改 编辑:程序博客网 时间:2024/05/27 09:45

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

2

6

4

Sample Output

Case 1: 1

Case 2: 1

Hint

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, ...

题意:给你一个数k  找出有多少个素数对(素数a+素数b=k  )a可以等于b   

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<map>#include<vector>#include<queue>#define  LL  long long//const LL INF=1e18;const int INF=1e7+5;using namespace std;int su[1000000],cnt,n,k;bool a[INF];void aa(){    int cnt=1;    memset(a,1,sizeof(a));    a[0]=a[1]=0;    for(int i=2;i<INF;i++)    {        if(a[i])            su[cnt++]=i;        for(int j=1;j<cnt&&su[j]*i<INF;j++)            a[su[j]*i]=0;    }}int main(){    aa();    int o=1;    int ans;    scanf("%d",&n);    while(n--)    {        ans=0;        scanf("%d",&k);        int k1=k/2;        for(int i=1;su[i]<=k1;i++)        {            if(a[k-su[i]])                ans++;        }        printf("Case %d: %d\n",o++,ans);    }}


原创粉丝点击