最大素因子
时间限制:
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
题目的意思一定要看清楚,本题说的是求一个数的因子中最大的素数的序数。比如(4的最大素因子是2,2在素数中的序数又是1,即输入4,输出1)
表示自己智商有限,首先就没看懂题目,在研究AC代码的时候,结合代码才看清楚题目。
代码的解题思路很巧妙,具体如下:
#include<stdio.h> #define max 1000010 int a[max]={0}; void num_prime() { int i,j,x=0; for(i=2;i<max;i++) { if(!a[i]) { x++; for(j=i;j<max;j=j+i) //素数的整倍数的最大素因子可能是该素数 a[j]=x; //更新素数对应的出现的次序 } } } int main() { num_prime(); int n; while(scanf("%d",&n)!=EOF) printf("%d\n",a[n]); return 0; }