XDOJ1038 - Qinz大牛猜想

来源:互联网 发布:百度帐号申诉网络异常 编辑:程序博客网 时间:2024/06/07 05:33
Description

Qinz大牛很爱猜想,所以经常能在比赛中YY出一些公式,并取得出其不意的效果。Qinz大牛坐火车去深圳实习,在漫长无聊的火车上,大牛又提出了一个想,“1+1=2”,他想一个数是否都能分解为两个奇素数的和呢?如果能的话,那一共会有多少对这样的数呢?(p1+p2=n,p2+p1=n,只能算一组)并将这样的数对定义为Qinz对,Qinz大牛没有带电脑,但他又很想知道他的这个猜想是否正确。现在由你来回答这个问题。
后来Qinz大牛发现他和哥德巴赫大牛不谋而合。并为此得意很久。

Input
第一行T,表示测试用例数,接下来T组测试用例
每一组测试用例有一个输入N(4<=N<=2^15),表示要分解的数。
Output
只有一行,输出答案
Sample Input
4
5
8
10
32768
Sample Output
0
1
2
244
Hint

10=3+7,10=5+5,所以有两组这样的数
10=3+7,10=7+3算一组。


解题思路:

主要考察的就是素数的判断,不多说。

#include<iostream>using namespace std;const int INF = 32770;bool isPrime[INF];int primes[INF/6];void getPrimes(){    for(int i=0;i<INF;++i)        isPrime[i] = true;    int t = 0;    for(int i=2;i<INF;++i)    {        if(isPrime[i])        {            for(int j=i+i;j<INF;j+=i)            {                isPrime[j] = false;            }            primes[t++] = i;        }    }}int Qinz(int num){    int t = 0;    for(int i=1;primes[i]<=num/2;++i)    {        if(isPrime[num-primes[i]])            ++t;    }    return t;}int main(){    int T;    cin>>T;    getPrimes();    for(int test=0;test<T;++test)    {        int N;        cin>>N;        if(N%2==1)        {            cout<<0<<endl;            continue;        }        cout<<Qinz(N)<<endl;    }    return 0;}


0 0
原创粉丝点击