素因子

Description

我们知道,任何一个大于1的数,都可以写成多个素数的乘积,我们把这些素数叫做这个数的素因子。

Input

第一行为测试数据的组数N,

以下N行,每行一个数字k(1<k<2^24)

Output

输出N行,每行两个数字,一个是k的最大素因子,第二个是k的素因子的个数。

Sample Input

3
10
25
120

Sample Output

5
2
5
1
5
3
代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
bool a[2100]={0};
int num[600];
int main()
{
    int n,m,count=0;
    int t =(int ) sqrt( 4200 );
    for (int i=3;i<t;i+=2)      //素数的筛选
    {
        if(a[i/2])
         continue;
         for(int j=i*i; j<=4200;j+=i<<1)
             a[j/2]=1;
    }
    num[++count]=2;
    for( int i=1;i<2100;i++ )
    {
         if( a[i]==0 )
            num[ ++count ]=(i<<1)+1;
    }
    scanf("%d",&n);
    for(int i=0; i< n; i++ )
    {
        int sum=0,x;
        scanf( "%d",&m );
        int j=1,flag;
        while( j<=count )
        {
            flag=0;
            while(!(m%num[j]))
            {
              if(!flag)
               sum++;
               x=num[j];
               flag=1;
               m/=num[j];
             }
             if(m==1)
              break;
             j++;   
        }
        if( m>1 )
        {
            sum++;
            x=m;   
        }
        printf( "%d %d\n",x,sum );       
    }
     return 0;   
}
posted @ 2011-08-02 12:30  wutaoKeen  阅读(3576)  评论(0)    收藏  举报