fjnu 1759 1+1猜想 II

来源:互联网 发布:淘宝内容运营优化 编辑:程序博客网 时间:2024/06/14 06:25
 

Description

1+1猜想:
找出和为x(x为偶数,x>4)的两个素数

Input

第一行为数据组数N,
接下来N行,每行都有一个偶数x (4<x<=4294967294)

Output

输出为N行,输出和为x的两个素数。若有多组,输出绝对值之差最大的一组。

Sample Input

31005526076419911924

Sample Output

3 97557 55255191583 419910341
KEY:这一题,数据比较大,要大范围的求素数,可以先用筛选法做一个65535的素数表;然后判断;
Source:

#include
<iostream>
#define MAX 65535
using namespace std;

int f[MAX]={0,1};
int prime[MAX];
int l;

void GetList()
{
    
int i,j;
    
for(i=2;i<MAX;i++)
        f[i]
=1;
    
for(i=2;i<MAX;i++)
    
{
        
while(!f[i]) i++;
        
for(j=i+i;j<=MAX;j+=i)
            f[j]
=0;
    }

    
for(i=2;i<MAX;i++)
    
{
        
if(f[i]) prime[++l]=i;
    }

}


int isPrime(unsigned long n)
{
     
for(int i=1;i<=l;i++)
         
if(prime[i]>=n)
             
break;
         
else 
             
if(n%prime[i]==0)
                 
return 0;
     
return 1;

}



int main()
{
//    freopen("fjnu_1759.in","r",stdin);
    GetList();
    
int N;
    unsigned 
long n;
    unsigned 
long i,j;
    cin
>>N;
    
for(i=1;i<=N;i++)
    
{
        cin
>>n;
        
for(j=3;j<=n;j++)
        
{
            
if(isPrime(j)&&isPrime(n-j)) 
            
{
                cout
<<j<<" "<<n-j<<endl;
                
break;
            }

            
else continue;
        }

    }

    
return 0;
}


 
原创粉丝点击