HDU 2136 Largest prime factor 参考代码

来源:互联网 发布:python将字典传入函数 编辑:程序博客网 时间:2024/06/05 20:49
#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[n]);    return true;}int main(){    createIndexes();    while(run());    return 0;}


0 0