首页 > 其他 > 详细

hdu2136Largest prime factor (关建在求素数,有点意思的题)

时间:2014-05-26 04:29:04      阅读:548      评论:0      收藏:0      [点我收藏+]
Problem Description
Everybody knows any number can be combined by the prime number.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.

Input
Each line will contain one integer n(0 < n < 1000000).

Output
Output the LPF(n).

Sample Input
1 2 3 4 5

Sample Output
0 1 2 1 3
题意:求一个数的最简因式中最大素数因子在所有的素数中位置,位置从0开始。
分析:所有的数都可以用素数的倍数来表示,原因:数分为两类:素数和非素数。非素数那么一定可以分解得到最简因式,素数不能分解,其最简因式是本身。
综上所述:一个数的最简因式中因子一定全是素数。
方法一:
#include<stdio.h>
int prim[1000005]={0};
void init()
{
    int k;
    prim[1]=0; k=1;
    for(int i=2;i<1000000;i++)
    if(prim[i]==0)//i是素数
    {
      for(int j=i; j<1000000; j+=i)
        prim[j]=k;
        k++;
    }
}
int main()
{
    int n;
    init();
    while(scanf("%d",&n)>0)
        printf("%d\n",prim[n]);
}


方法二:
#include<stdio.h>
int vist[1000005]={0},prim[1000005];
void init()
{
    int k;
    prim[1]=1; prim[2]=2;k=3;
    for(int i=3;i<1000000;i+=2)
    if(vist[i]==0)
    {
        prim[i]=k; k++;
        for(int j=i; j<1000000; j+=i)
        if(vist[j]==0)
        vist[j]=1;
    }
}
int main()
{
    int n,posit;
    init();
    while(scanf("%d",&n)>0)
    {
        posit=1;
        for(int i=2; ; i++)
            if(prim[n]==0)
            {
                if(prim[i]&&n%i==0)posit=i;
                while(n%i==0)n/=i;
            }
            else
            {
               if(n>posit)posit=n; break;
            }
            printf("%d\n",prim[posit]-1);
    }
}


hdu2136Largest prime factor (关建在求素数,有点意思的题),布布扣,bubuko.com

hdu2136Largest prime factor (关建在求素数,有点意思的题)

原文:http://blog.csdn.net/u010372095/article/details/26624367

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!