最大素因子
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=520
分析:先筛素数,同时记录下素数的序号,然后质因数分解。
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000005
using namespace std;
int cnt,num;
long long n;
bool flag[maxn]={};
int prime[maxn];
int count[maxn]={};
int por[maxn];
int cpor[maxn];
void isprime()
{
cnt=;
for(int i=;i<=maxn;i++)
if(!flag[i])
{
prime[cnt++]=i;count[i]=cnt;
for(int j=;i*j<=maxn;j++)
flag[i*j]=true;
}
}
void fen(int n)
{
num=;
for(int i=;i<cnt&&prime[i]*prime[i]<=n;i++)
{
if(n%prime[i]==)
{
por[num]=prime[i];
cpor[num]=;
while(n%prime[i]==)
{
cpor[num]++;
n/=prime[i];
}
num++;
}
}
if(n>)
{
por[num]=n;
cpor[num++]=;
}
} int main()
{
isprime();
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==){printf("0\n");continue;}
fen(n);
printf("%d\n",count[por[num-]]);
}
return ;
}