素因子
1575: 素因子
Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 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) 编辑 收藏 举报