且未

博客园 首页 新随笔 联系 订阅 管理

题目       题意:要求输出所给定的数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上面那种写法如此巧妙。。。。

posted on 2018-09-10 18:27  阿聊  阅读(146)  评论(0)    收藏  举报