Problem B: 素因子
Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 266 Solved: 113
[Submit][Status][Web Board]
Description
我们知道,任何一个大于1的数,都可以写成多个素数的乘积,我们把这些素数叫做这个数的素因子。
Input
第一行为测试数据的组数N,
以下N行,每行一个数字k(1<k<2^24)
Output
输出N行,每行两个数字,一个是k的最大素因子,第二个是k的素因子的个数。
Sample Input
3 10 25 120
Sample Output
5 2
#include"stdio.h"
#include"math.h"
inline void read(int &p)//输入p;
{
char ch;
while(ch=getchar(),ch<'0'||ch>'9');
p=ch-'0';
while(ch=getchar(),ch>='0'&&ch<='9')
p=p*10+ch-'0';
}
char prime[4205]={0};
int num[4000],cnt=0;
int main()
{
int T;
read(T);
int i=4;
while(i<=4200)
prime[i]=1,i+=2;
for(int i=3;i<=2200;i+=2)
if(!prime[i])
for(int j=i*i;j<=4200;j+=i)
prime[j]=1;
for(int i=2;i<=4200;++i)
if(!prime[i])
num[cnt++]=i;
while(T--)
{
int n;
read(n);
int Max=0,s=0;
int i=0;
int t=sqrt(n);
for(;num[i]<=t;++i)
{
if(n%num[i]==0)
{
if(num[i]>Max)
Max=num[i];
while(n%num[i]==0)
n/=num[i];
++s;
}
t=sqrt(n);
}
if(n>1)
++s,Max=n;
printf("%d %d\n",Max,s);
}
return 0;
}