您的位置:首页 > 编程语言

HDU 2136 Largest prime factor 參考代码

2016-03-30 15:32 501 查看
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

const int MAX=1000001;

bool isPrime[MAX];//isPrime[i]=true表示是素数,false表示不是
int indexes[MAX]; //存放素数因子的序号

void eraosthenes()
{
fill(isPrime,isPrime+MAX,true);//如果0~MAX都是素数
isPrime[0]=isPrime[1]=false; //把0,1筛去
int n=sqrt((double)MAX);

for(int i=2; i<=n; i++)
{
if (isPrime[i]==false) continue;

for(int j=i*i; j<MAX; j+=i)
{
if (isPrime[j]==false) continue;
isPrime[j]=false;
}
}
}

void createIndexes()
{
eraosthenes();
int i,k=1;
for(i=2; i<MAX; i++)
if (isPrime[i]==true) indexes[i]=k++;

int m=MAX/2;
for(i=2; i<=m; i++)
{
if (isPrime[i]==true)
{
int pos=2*i;
while(pos<MAX)
{
indexes[pos]=indexes[i];
pos+=i;
}
}
}
}

bool run()
{
int n;
if (scanf("%d",&n)==EOF) return false;
printf("%d\n",indexes
);
return true;
}

int main()
{
createIndexes();
while(run());
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: