HDU 2126 Largest prime factor

Largest prime factor

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20386    Accepted Submission(s): 6980


 

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
 
 
题目大意:输入一个数,要求输出这个数最大素数因子是第几个素数?1是0号素数,2是1号素数,3是2号素数,以此类推
 
思路:用埃氏筛法的思想打表,不打表的话会超时,见注释,
 
#include <iostream>
using namespace std;
int prime[1000001] = {0},primeNum = 1;
void findPrime(){
    for(int i = 2;i<1000001;i++){
        if(prime[i]==0){
            prime[i] = primeNum++; //i是第primeNum号素数
            for(int j = i+i;j<1000001;j+=i){
                prime[j] = prime[i]; //更新所有以i为因子的数
            }
        }
    }
}
int main()
{
    int n;
    findPrime();
    while(scanf("%d",&n)!=EOF){
        if(n==1)printf("0\n");
        else {
            printf("%d\n",prime[n]);// 直接输出n的最大素因子是第几号素数
        }
    }
    return 0;
}
 
发布了38 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40167974/article/details/104616409
今日推荐