1. 程式人生 > >HDU 2136 Largest prime factor

HDU 2136 Largest prime factor

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

通過素數篩的過程中來求得最大素數因子。。。

程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
const int maxn=1000010;
int Isn[maxn];
int n;
vector<int>ve;
int loc[maxn];
void init()
{
    memset (Isn,0,sizeof(Isn));
}
void Is_prime()
{
    loc[1]=0;
    for (int i=2,k=1;i<maxn;i++)
    {
          if(!Isn[i])
          {
              loc[i]=k++;
              for (int j=i;j<maxn;j+=i)
              {
                        Isn[j]=i;
              }
          }
    }
}
int main()
{
    init();
    Is_prime();
    while (scanf("%d",&n)!=EOF)
    {
        printf("%d\n",loc[Isn[n]]);
    }
    return 0;
}