数论专题 hdu2136

本题题意:给出一个数,求出其最大素数因子在素数中的位置.

代码如下:

#include <cstdio>
#define MAX 1000000
using namespace std;
int a[MAX+1];
void Prime()
{
        a[1] = 0;
        int t = 2;
        int l = 1;
        int i;
        while(t <= MAX)
        {
                for(i=t;i<=MAX;i+=t)a[i] = l;
                for(i=t;i<=MAX;i++)if(a[i]==0){t = i;break;}
                l++;
                if(i == MAX+1)break;
        }
}

int main()
{
        Prime();
        int n;
        while(~scanf("%d",&n))
        {
                printf("%d\n",a[n]);
        }
        return 0;
}

这个代码感觉太神奇了,我自己写的一个就TLE了,上面这个代码的思路是先铺满2的倍数再铺满3的倍数,5的倍数依次。。然后最后得到的每个位置上就是最大因子的序号了。

posted @ 2017-09-12 20:19  mtl6906  阅读(220)  评论(0编辑  收藏  举报