Hdu-1262寻找素数对
2017-05-24 22:03
323 查看
寻找素数对
Problem Description
Input
Output
Sample Input
Sample Output
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13710 Accepted Submission(s): 6914
Problem Description
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数. 做好了这件实事,就能说明这个猜想是成立的. 由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
Input
输入中是一些偶整数M(5<M<=10000).
Output
对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
Sample Input
20 30 40
Sample Output
7 13 13 17 17 23
/* 何为素数筛选法:就是把已知素数的倍数标记为合数。开始最小的素数为2. */ #include<iostream> #include<cmath> #include<vector> #include<cstdio> using namespace std; const int maxn = 10005; vector<int> in; int prime[maxn]={0}; void prime_num() { prime[0]=prime[1]=1; for(int i=2;i<=maxn;i++) { if(!prime[i]) { for(int j=i*2;j<=maxn;j+=i) prime[j]=1; } } } void inp() { in.clear(); int x; char ch; do { scanf("%d%c",&x,&ch); in.push_back(x); }while(ch!=10); } void solve() { for(int i=0;i<in.size();i++) { int t=in[i]>>1; int l=t,r=t; while(l>=2&&r<in[i]) { if(prime[l]||prime[r]) { if(prime[l]) l--; if(prime[r]) r++; continue; } if(l+r==in[i]) { cout<<l<<" "<<r<<endl; break; } if(l+r>in[i]) { l--; continue; } if(l+r<in[i]) { r++; continue; } } } } int main() { prime_num(); inp(); solve(); }
相关文章推荐
- hdu1262-寻找素数对
- HDU1262 寻找素数对
- hdu 1262 寻找素数对
- hdu-oj 1262 寻找素数对
- hdu1262 寻找素数对
- HDU 1262 寻找素数对
- HDU 1262 寻找素数对 模拟题
- 素数打表 HDU——1262 寻找素数对
- HDU 1262 寻找素数对
- hdu-1262-寻找素数对
- hdu 1262 寻找素数对
- hdu1262 数论基础 寻找素数对
- hdu 1262 寻找素数
- HDU 1262 寻找素数对(素数)
- 数论--HDU1262 寻找素数对【素数】
- HDU 1262 寻找素数对
- HDU 1262 寻找素数对
- HDU 1262-寻找素数对
- HDU 1262 寻找素数对
- HDU 1262 寻找素数对