【c++】求n以内素数
素数,即质数,除了1和它本身,再不能被其他数整除的数。
求素数需注意两点:
(1) 1既不是质数也不是合数
(2) 2是最小的质数
【代码实例】因刚学习向量容器,所以用向量vector来写的,代码如下:
// vector操作.cpp
//判断n以内的素数(质数)prime
#include<iostream>
#include<vector>
using namespace std;
int main(int argc,char *argv[])
{
vector<int> A(10); //先定义一个int型向量,初始大小为 10
int n; // n以内的素数
int prime_count=0;
cout<<"输入一个数:"<<endl;
cin>>n;
// n=1的情况,无素数
if(n==1)
{
cout<<"无符合条件的素数"<<endl;
return 0;
}
// n=2 仅有2这一个素数(2是最小的质数)
if(n==2)
{
cout<<"2"<<endl;
return 0;
}
// n>2的情况
A[prime_count++]=2; //像访问数组一样,用下标[]访问vector
for(int i=3;i<=n;i++)
{
if(prime_count == A.size() )
{
A.resize(prime_count +10) ;//vector A的容量再加 10
}
//求素数的核心代码
if(i%2==0) continue; // 大于2的偶数肯定不是质数
int j=3;
while( j<=i/2 && i%j!=0 )
{
j+=2;
}
//判断j跳出上述while原因:
//若i能被j整除,i肯定不是质数;
//若i还不能被j整数,且j已大于i/2,则i是质数。
if(j >i/2 )
{
A[prime_count++] =i;
}
}
for(int i=0;i<prime_count;i++)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}
运行结果:
------------------------------------------- END -------------------------------------