hdu 2136(质数筛选+整数分解)

Posted AC菜鸟机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2136(质数筛选+整数分解)相关的知识,希望对你有一定的参考价值。

Largest prime factor

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


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 <stdio.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
typedef long long LL;
const int N = 1000000;
bool p[N]; ///为false代表是素数
int idx[N];
void init(){
    memset(p,false,sizeof(p));
    int id = 1;
    for(int i=2;i<N;i++){
        if(!p[i]){
            idx[i] = id++;
            for(LL j=(LL)i*i;j<N;j+=i){
                p[j] = true;
            }
        }
    }
}
int getMax(int n){
    int Max = -1;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            while(n%i==0){
                n/=i;
            }
            Max = max(i,Max);
        }
    }
    if(n>1) Max = max(Max,n);
    return Max;
}
int main()
{
    init();
    int n;
    while(scanf("%d",&n)!=EOF){
        if(n==1) printf("0\n");
        else{
            int Max = getMax(n);
            printf("%d\n",idx[Max]);
        }
    }
}

 

以上是关于hdu 2136(质数筛选+整数分解)的主要内容,如果未能解决你的问题,请参考以下文章

1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)

java实现一个整数分解为两个质数乘积

小练习1-----分解质因式

e[2333333, 23333333] 中有多少个正整数 可以被分解为 12 个质数相乘?

c语言分解质因数问题 已知正整数n是两个不同的质数的乘积,求较大的质数

Luogu P1075 质因数分解题解