poj2262---素数(质数)的判断
收获:一开始以为是100万的所有数字,题目要求是只要偶数,也可以分析出来,如果是给一个奇数,当我们给他大于等于3的奇数(这个数加有可能不是质数,但至少满足是奇数,至于是不是质数还要自己判断),剪出来一定是个偶数,无论如何都给不出答案,但是,题目要求输入偶数,偶数可以=奇数+奇数
因此一定会出现:
20
3 5 7 9 11 13 15 17 19
17 15 13 11 9 7 5 3 1
i<=n/2就可以了
附带素数的筛选法:
http://download.csdn.net/detail/u012203889/6484529
discuss上有种先把表给打出来,然后查表的方法,很快
http://poj.org/showmessage?message_id=341336
暴力筛选素数的方法:
按理说是将一个数n从2开始,一直除到n-1,如果其中有能被整除的,那么就不是质数
优化下,开n的根,有这样一个定理:如果说n不能被x整除,那么n也不能被x^2整除
2是下限,根号n是上限,2到根号n之间的数如果都不诶整除,那么
#include <stdio.h> #include <stdlib.h> #include<math.h> int isPriOdd(int a,int b) { int i; for(i=2;i <= sqrt(a); i++) { if(a%i == 0) return 0; } return 0; for(i=2;i <= sqrt(b); i++) { if(b%i == 0) return 0; } return 1; } int main() { int n,tmp; while(scanf("%d",&n) != EOF) { int b,i; if(n==0) break; for(i=3;i<=n/2;i+=2) { b=n-i; tmp=isPriOdd(i,b); if(tmp == 1) break; } printf("%d = %d + %d\n",n,i,b); } return 0; }