素因子

1575: 素因子

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 254  Solved: 102
[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 5 1 5 3
#include <stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<math.h>

int main( )
{
int i, j, n, p, k = 0, prime[4200] = {0},dx[1500], t;
for (i = 2; i <= 65; i++)
if (prime[i] == 0) {
for(j = 2 * i ; j <= 4200; j += i)
prime[j]
= 1;
}
for (i = 2; i <=4200; i++)
if (prime[i] == 0)
dx[k
++] = i;
//for (i = 0; i < 40; i++)
printf("%d\n",k);
int T;
scanf(
"%d",&T);
while (T--) {
int max = 0, num = 0;
scanf(
"%d",&n);
t
= sqrt(n);
for (i = 0; dx[i] <= t && i < k; i++) {
if ( n % dx[i] == 0)
{
if (dx[i] > max )
max
= dx[i];
while(n % dx[i] == 0)
n
= n / dx[i];
num
++;

}
t
= sqrt(n);
}
if (n > 1)
num
++, max = n;
printf(
"%d %d\n",max,num);

}
return 0;
}
55ms..

posted on 2011-08-02 10:02  more think, more gains  阅读(226)  评论(0编辑  收藏  举报

导航