最大素因子
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
i c e最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.
- 输入
- 有多组测试数据,每一行输入一个数字n.(0<n<=1000000) 输出
- 在接下来的一行,输出结果. 样例输入
-
1 2 3 4 5
样例输出 -
0 1 2 1 3
#include<iostream> #include<string.h> #include<algorithm> #include<cstdio> #include<cmath> #define N 1000005 using namespace std; int prim[N]={1,1,0}; int a[N]; int b[N]; int tot; void init() { memset(b,0,sizeof(b)); for(int i=2;i<=N/2;++i) for(int j=2*i;j<=N;j+=i) { b[j]=max(i,b[j]); prim[j]=1; } tot=1; for(int i=2;i<=N;++i) if(!prim[i]) a[i]=tot++; } int main() { int n; init(); while(~scanf("%d",&n)) { if(n==1) printf("0\n"); else if(n==2) printf("1\n"); else { if(!prim[n]) printf("%d\n",a[n]); else printf("%d\n",a[b[n]]); } }return 0; }