什么是素数:
除了自身和1之外没有其他因子,则称为素数
5.4.1 素数的判断:
1.就是循环的长度从i=2~~i<=sqrt(n)的代码:
bool isPrime(int n)
{
if(n<=1)
return false; //n<1叫做待判断
for(int i=2; i<=(int)sqrt(1.0*n); i++) //遍历2~~sqrt(n)
{ //由于sqrt的参数需要浮点数,所以必须给n*小数
if(n%i==0) //如果n能把i整除,则立马返回false
return false;
}
return true; //n为素数
}
2.循环的设置是从i=2~~~i**<=n
bool isPrime(int n)
{
if(n<=1)
return false; //n<1叫做待判断
for(int i=2; i*i<=n; i++) //遍历2~~sqrt(n),这种写法把i设置为long long类型
{
if(n%i==0) //如果n能把i整除,则立马返回false
return false;
}
return true; //n为素数
}
3.用判断素数函数isprime()求100以内的所有素数,简约代码:
const int maxn=101; //要求输出1--100的素数,所以最大值设置为101
int prime[maxn]={0},PNum=0;
bool P[maxn]={0}; //p[i]==true表示i为素数
void Find_Prime()
{
for(int i=1; i<maxn; i++) //从1--100遍历循环,不能写成i<=maxn
{
if(isprime(i)==true) //如果i为素数,则把它放到数组prime中,然后将p[i]的值设为true
{
prime[PNum++]=i;
p[i]=true;
}
}
}
//完整的代码:
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
if(n<=1)
return false;
for(int i=2; i<=(int)sqrt(1.0*n); i++) //不要忘记这里i=2开始,一直到i<=sqrt(n)
if(n%i==0)
return false;
return true;
}
const int maxn=101;
int prime[maxn]={0},pNume=0;
bool p[maxn]={0};
void Find_Prime()
{
for(int i=2; i<maxn; i++)
{
if(isprime(i)==true)
{
prime[pNume++]=i;
p[i]=true;
}
}
}
int main()
{
Find_Prime();
for(int i=2; i<maxn; i++)
{
if(p[i]==true)
cout << i << " ";
}
return 0;
}
4.用筛法求100以内的所有素数,简约代码:
const int maxn=101; //表长
int prime[maxn]={0},pNum=0; //prime数组存放所有素数,pNum表示素数个数
bool p[maxn]={0}; //如果素数时i,则p[i]为false,否则为true
void Find_Prime()
{
for(int i=2; i<maxn; i++) //i从2开始,不要到maxn
{
if(p[i]==false) //如果i是素数
{
prime[pNum++]=i; //则将素数保存在prime中
for(int j=i+i; j<maxn; j+=i) //将所有i的倍数全设置为非素数
p[j]=true;
}
}
}
//完整的代码:
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=101; //表长
int prime[maxn]={0},pNum=0; //prime数组存放所有素数,pNum表示素数个数
bool p[maxn]={0}; //如果素数时i,则p[i]为false,否则为true
void Find_Prime()
{
for(int i=2; i<maxn; i++) //i从2开始,不要到maxn
{
if(p[i]==false) //如果i是素数
{
prime[pNum++]=i; //则将素数保存在prime中
for(int j=i+i; j<maxn; j+=i) //将所有i的倍数全设置为非素数
p[j]=true;
}
}
}
int main()
{
Find_Prime();
for(int i=2; i<maxn; i++)
{
if(p[i]==false)
cout << i << " ";
}
return 0;
}