素因子

Problem B: 素因子

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 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;  
}
posted @ 2011-08-02 10:54  bcy  阅读(347)  评论(0编辑  收藏  举报