哇~ 好心烦啊,我把质数的概念搞错了。
质数(prime number)又称素数,有无限个。
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
所以1不是素数,小于0也不是素数 下面是正确的检查素数代码:
int chenck_prime(int num)//素数返回1 { if(num<=0){ return 0;//小于0 不是素数 } else if(num==1){ return 0;// 1 也不是 } else if(num==2){ return 1; } else{ for(int i=2;i<num;i++){ if(num%i==0){ return 0;//要是还有其它能被他整除的数,那也不是素数 } } return 1; } }
然后这道题的答案不就和吃豆腐一样的吗?
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<algorithm> #include<stdlib.h> using namespace std; /* 抱歉 我今天A一题关于素数题目的时候发现昨天和你说的方法是错的,今天baidu了下,才知道概念错了 质数(prime number)又称素数,有无限个。 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。 所以1不是素数,小于0也不是素数 下面是正确的检查素数代码 */ int chenck_prime(int num)//素数返回1 { if(num<=0){ return 0;//小于0 不是素数 } else if(num==1){ return 0;// 1 也不是 } else if(num==2){ return 1; } else{ for(int i=2;i<num;i++){ if(num%i==0){ return 0;//要是还有其它能被他整除的数,那也不是素数 } } return 1; } } int main() { int m,n; while(cin>>m>>n){ if(m==0&&n==0){ break; } int sum=0; for(int i=m;i<=n;i++){ if(chenck_prime(i*i+i+41)==1) { sum++; } } if(sum==n-m+1){ cout<<"OK"<<endl; }else { cout<<"Sorry"<<endl; } } return 0; }
新增修改:
在做一题跟时间效率有关的题目时,发现了寻找质数还有这么一个算法:
int chenck_prime(int num)//素数返回1 { if(num<=0){ return 0;//小于0 不是素数 } for(int i=2;i<=sqrt(num);i++) { if(num%i==0) { return 0; } } return 1; }