最大素因子
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.
-
输入
- 有多组测试数据,每一行输入一个数字n.(0<n<=1000000) 输出
- 在接下来的一行,输出结果. 样例输入
-
2 3 4 5
样例输出
-
1 2 1 3
来源
- hdu改编 上传者
与快速线性筛法不同的是,这个不是判断一个数是不是素数,而是判断这个数的最大素因子的位置,所以输入一个数i,输出最大素因子的位置,即
下标为i的数值应为最大素因子的位置
代码如下
#include<stdio.h> const int N=1e6+100; int a[N]; void count() {int t=1; for(int i=2;i<N;i++) { if(!a[i]) a[i]=t++;//记录位置 for(int j=2;j*i<N;j++) { a[i*j]=a[i];//经典的两步,不太明白,据说是为了避免重复; if(i%j==0) break; } } } int main() {count(); int n; while(~scanf("%d",&n)) { printf("%d\n",a[n]); } }