Largest prime factor(素數篩選法)

Largest prime factor
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6950 Accepted Submission(s): 2122

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

//這裏用了素數篩選法 這裏一開始想打表 可是一看數據規模爲一百萬 如果還用之前的打表 那麼肯定會超時的 所以這裏採用了篩選法 一個數爲素數那麼他的倍數一定不是一個素數 即合數 2 是素數 那麼2的倍數都不是素數 3 是素數 6,9,。。。3*n 肯定也都不是素數了 那麼他的最大質因數就是3 的最大質因數 此時這種效率就非常的高了

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int prime[3000007];
int indx = 0;
void dabiao()
{
    prime[1] = 0;
    for(long i =2;i<=3000000;i++)
    {
        if(prime[i]==0)//只有prime爲0 那麼他纔是一個素數
        {
            prime[i] = ++indx;
            for(long j = i+i ;j<=1000000;j+=i)//篩選素數的倍數
                prime[j] = prime[i];
        }
    }
}
int main()
{
    dabiao();
    long tt;
    while(~scanf("%ld",&tt))
    {
        printf("%ld\n",prime[tt]);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章