0
点赞
收藏
分享

微信扫一扫

HDU-4715 Difference Between Primes(线性筛法)

君之言之 2022-09-16 阅读 110

Difference Between Primes

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4158    Accepted Submission(s): 1194

Problem Description

All you know Goldbach conjecture.That is to say, Every even integer greater than 2 can be expressed as the sum of two primes. Today, skywind present a new conjecture: every even integer can be expressed as the difference of two primes. To validate this conjecture, you are asked to write a program.

 

 

Input

The first line of input is a number nidentified the count of test cases(n<10^5). There is a even number xat the next nlines. The absolute value of xis not greater than 10^6.

 

 

Output

For each number xtested, outputstwo primes aand bat one line separatedwith one space where a-b=x. If more than one group can meet it, output the minimum group. If no primes can satisfy it, output 'FAIL'.

 

 

Sample Input

3 6 10 20

 

 

Sample Output

11 5 13 3 23 3

 

 

Source

​​2013 ACM/ICPC Asia Regional Online —— Warmup ​​

 

NOIP2017准备之线性筛法

 

1 #include "bits/stdc++.h"
2 using namespace std;
3 typedef long long LL;
4 const int MAX=1e6+5;
5 int n,cas;
6 int pri[MAX];
7 bool t[MAX];
8 inline int read(){
9 int an=0,x=1;char c=getchar();
10 while (c<'0' || c>'9') {if (c=='-') x=-1;c=getchar();}
11 while (c>='0' && c<='9') {an=an*10+c-'0';c=getchar();}
12 return an*x;
13 }
14 void Prime(){
15 int i,j;
16 memset(t,true,sizeof(t));
17 for (i=2;i<MAX;i++){
18 if (t[i]) pri[++pri[0]]=i;
19 for (j=1;j<=pri[0] && pri[j]*i<MAX;j++){
20 t[i*pri[j]]=false;
21 if (i%pri[j]==0) break;
22 }
23 }
24 }
25 int main(){
26 freopen ("prime.in","r",stdin);
27 freopen ("prime.out","w",stdout);
28 int i,j,x;
29 Prime();
30 bool fu;
31 cas=read();
32 while (cas--){
33 x=read();
34 fu=false;
35 if (x<0){fu=true;x=-x;}
36 bool flag=false;
37 for (i=1;i<=pri[0];i++){
38 if (pri[i]+x>=MAX) continue;
39 if (t[pri[i]+x]) break;
40 }
41 if (i==pri[0]+1){puts("FAIL");}
42 else{
43 if (fu){
44 printf("%d %d\n",pri[i],pri[i]+x);
45 }
46 else{
47 printf("%d %d\n",pri[i]+x,pri[i]);
48 }
49 }
50 }
51 return 0;
52

 

举报

相关推荐

0 条评论