hdu 2136 Largest prime factor

题目       题意:要求输出所给定的数n的最大质因子的序号,0<n<1000000。设1的序号为0,则2的序号为1,3的序号为2,5的序号为3,以此类推。

#include <cstdio>
#include <iostream>
using namespace std;
const int Max = 1e6+10;

int num[Max];

void cal()
{
     int cnt = 1;
    memset(num,0,sizeof(num));
    for(int i=2;i<Max;i++)
    {
        if(!num[i]){
            for(int j=i;j<Max;j+=i)
                num[j]=cnt;
                cnt++;
        }
    }
}
int main(){
   int n;
   cal();
   while(scanf("%d",&n)!=EOF)
   {
      printf("%d\n",num[n]);
   }
    return 0;
}

刚开始想的是,先把素数筛选出来prime[ ],顺便给它排个序rank[ ]。然后质因数分解n,找到最大的质因数max ,最后输出rank[max],game over,t 了.  but上面那种写法如此巧妙。。。。

猜你喜欢

转载自blog.csdn.net/qie_wei/article/details/82593807
今日推荐