NYOJ 520 最大素因子【快速线性筛法的变形】

来源:互联网 发布:word文档翻译软件 编辑:程序博客网 时间:2024/06/05 16:47

最大素因子

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.

输入
有多组测试数据,每一行输入一个数字n.(0<n<=1000000)
输出
在接下来的一行,输出结果.
样例输入
2345
样例输出
1213
来源
hdu改编
上传者

ACM_李如兵


与快速线性筛法不同的是,这个不是判断一个数是不是素数,而是判断这个数的最大素因子的位置,所以输入一个数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]);}}




0 0