SGU:231 Prime Sum
2013-07-27 21:01
197 查看
这是个比较坑的题。无论时间还是内存卡的都很紧,也暴露出一些问题。
开数组要用bool类型,因为bool只有一个字节,而int是4个字节。否则会内存超限。
另外题目要求两素数之和也是素数,显然两奇数之和或者两偶数之和都是偶数,而偶数除了2都不是素数(此话不严谨),只可能是奇数与偶数的和,得到奇数才可能是素数,那么这个偶数素数肯定是2,另外一个素数(必定是奇数)需要挨个遍历了。
为了得到所有素数,使用了素数表。为了打印出各个素数,又用了一个数组(不需要开太大)存符合的数字。
我会牢牢地记住这个题。
比赛的时候没做出来。后来得到别人的提示写出代码交上居然还不对,反复改了又改老是WA,几乎绝望了。最后问别人才知道原来一开始要先输出符合的对数然后才是打印。
居然没注意到!
我该得到的教训是,当你写出一份代码,试遍各种数据,自以为完整无误,但交上总是不对,那么就再去读一遍题。可能会有你忽略的条件或细节,一点点就足以致命了。
开数组要用bool类型,因为bool只有一个字节,而int是4个字节。否则会内存超限。
另外题目要求两素数之和也是素数,显然两奇数之和或者两偶数之和都是偶数,而偶数除了2都不是素数(此话不严谨),只可能是奇数与偶数的和,得到奇数才可能是素数,那么这个偶数素数肯定是2,另外一个素数(必定是奇数)需要挨个遍历了。
为了得到所有素数,使用了素数表。为了打印出各个素数,又用了一个数组(不需要开太大)存符合的数字。
我会牢牢地记住这个题。
比赛的时候没做出来。后来得到别人的提示写出代码交上居然还不对,反复改了又改老是WA,几乎绝望了。最后问别人才知道原来一开始要先输出符合的对数然后才是打印。
居然没注意到!
我该得到的教训是,当你写出一份代码,试遍各种数据,自以为完整无误,但交上总是不对,那么就再去读一遍题。可能会有你忽略的条件或细节,一点点就足以致命了。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> using namespace std; bool p[1000005]={0}; int main() { //freopen("in.txt","r",stdin); p[1]=1; p[2]=0; for(int i=2;i<=1000000;++i) for(int j=i+i;j<=1000000;j+=i) if(!p[j]) p[j]=1; int N; scanf("%d",&N); int count=0; int a[10000]={0}; for(int i=2;i<=N;++i) if(!p[i]&&!p[2+i]&&2+i<=N) a[count++]=i; printf("%d\n",count); for(int i=0;i<count;++i) printf("2 %d\n",a[i]); return 0; }
相关文章推荐
- SGU 231 Prime Sum 求<=n内有多少对素数(a,b)使得a+b也为素数 规律题
- SGU 231 Prime Sum 求<=n内有多少对素数(a,b)使得a+b也为素数 规律题
- SGU 231 Prime Sum(傻逼题)
- 求解两数和是素数——sgu231
- sgu 231 打表+二分 水过~~
- SGU 231
- SGU 231.Prime Sum
- 代码的“门面”——模式系列谈之Façade模式
- sgu 116
- Sgu 104
- SGU 326 Perspective
- SGU 100 A+B 翻译 题解
- 【SGU 101】Domino
- sgu 524 Buoys(三分加中位数定理)
- SGU 109 Magic of David Copperfield II
- SGU 499 Greatest Greatest Common Divisor
- [SGU222 Little Rooks]
- SGU 123
- SGU102 Coprimes
- SGU 138