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.
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 (唯一分解定理+素数筛选)
e[2333333, 23333333] 中有多少个正整数 可以被分解为 12 个质数相乘?