题目 题意:要求输出所给定的数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
",num[n]);
}
return 0;
}
刚开始想的是,先把素数筛选出来prime[ ],顺便给它排个序rank[ ]。然后质因数分解n,找到最大的质因数max ,最后输出rank[max],game over,t 了. but上面那种写法如此巧妙。。。。