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

Posted 可惜没如果=_=

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU-4715 Difference Between Primes(线性筛法)相关的知识,希望对你有一定的参考价值。

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
 
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 }

 

以上是关于HDU-4715 Difference Between Primes(线性筛法)的主要内容,如果未能解决你的问题,请参考以下文章

set_difference的介绍

The difference between UDS on IP and UDS on CAN

what is the difference between upload and download?

Python集合-difference()方法

C++adjacent_difference 的使用

Difference between link and @import