您的位置:首页 > 其它

HDU 2136 素数打表+求质数因子

2015-11-26 23:53 232 查看

Largest prime factor

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

[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
Each line will contain one integer n(0 < n < 1000000).

[align=left]Output[/align]
Output the LPF(n).

[align=left]Sample Input[/align]

1
2
3
4
5

[align=left]Sample Output[/align]

0
1
2
1
3

[align=left]Author[/align]
Wiskey

[align=left]Source[/align]
HDU 2007-11 Programming Contest_WarmUp

题意:求一个数的最大质数因子在素数表中的位置
素数打表+求质因子

#include<bits/stdc++.h>
using namespace std;
int n;
bool visit[1000005];
int prime[1000005];
map<int,int>mp;
int len;
int que[10];
void init_prim()
{
memset(visit, true, sizeof(visit));
int num = 0;
for (int i = 2; i <= 1000000; ++i)
{
for(int j=i+i;j<=1000000;j=j+i)
visit[j]=false;
}
for(int i=2;i<=1000000;i++)
if(visit[i])
{
prime[++num]=i;
mp[i]=num;
}
}
void prime_(int  nn)
{
len=0;
for(int i=2;i*i<=nn;i++)
{
if(nn%i==0)
{
que[len++]=i;
while(nn%i==0)
{
nn=nn/i;
}
}
}
if(nn>1)
que[len++]=nn;
}
int main()
{
init_prim();
while(scanf("%d",&n)!=EOF)
{
len=0;
memset(que,0,sizeof(que));
if(n==1)
printf("0\n");
else
{
prime_(n);
sort(que,que+len);
//cout<<len<<endl;
printf("%d\n",mp[que[len-1]]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: