找素数(算法笔记)
题目描述: 设pi表示第i个素数。输入两个数m,n,找出pm到pn的所有素数。
题目分析: 素数是能被1和自身整除的数,注意1不是素数。如何判断数N是否是素数?可以通过枚举法,看从2到该数之间是否有被N整除的数。为了减少循环的次数,可以将N除以2得到A,即判断2到A之间是否有被N整除的数。
素数可以判断了,接下来如何找第k个素数。定义一个数i,i从1开始,判断i是否是素数并递增i。再定义一个计数器count,每找到一个素数,count++,直到count等于k,此时的i即为所求。
结果截图:
输出第5个素数到第27个素数之间所有素数
代码如下:
#include<iostream>
using namespace std;
// 判断一个数是否是素数
bool isPrimeNum(int a){
int k=0,t;
if(a==2 || a==3){
k=0;
}else if(a==1){
k=1; //1不是素数
}else {
for(int i=2;i<=a/2;i++){
if(a%i==0){
k=1;
break; // 有除数,不是素数,跳出循环
}
}
}
return k==0?true:false;
}
//找第n个素数
int findPrime(int n){
int i=1, k=2,count=0; //k用于动态添加循环的次数,count计数
while(k!=0){
if(isPrimeNum(i)){
count++;
}
if(count==n){
k=0;
}else{
k++;
}
i++;
}
return i-1;
}
int main(){
int m,n;
cin>>m>>n; //输出从第m个素数到n个素数
for(int i=m;i<=n;i++){
cout<<findPrime(i)<<' ';
}
return 0;
}