在网上找了好多方法,并没有什么特别的方法,就是遍历。
//先来一遍ola筛,筛出所有素数
const int N=3e7+1;
bool IsPrime[N];//真值为素数
int Prime[N],cnt;//存储的素数从下标1开始
vector<int>v;
void ola(int n) { //筛选到n
memset(IsPrime,1,sizeof(IsPrime));//初始化
//假设每个数都为素数
IsPrime[1]=IsPrime[0]=0;
for(int i=2; i<=n; i++) {
if(IsPrime[i])//如果这个数没筛掉,那么将其加入素数序列
{
Prime[++cnt]=i;
}
for(int j=1; j<=cnt&&i*Prime[j]<=n; j++) {
IsPrime[i*Prime[j]]=0;
if(!i%Prime[j])
break;
}
}
}
void primeFactor(int c)
{
for(int i=1;Prime[i]*Prime[i]<=c;i++)
{
if(c%Prime[i]==0)
{
v.push_back(Prime[i]);
while(c%Prime[i]==0)
{
c/=Prime[i];
}
}
}
if(c>1){
v.push_back(c);
}
}