输入一个正整数repeat (0 < repeat < 10),做repeat次下列运算:
输入一个正整数 m(1 < m < 1000),将 m 分解质因数。
输出使用以下语句:
printf("%d*", i);
输入输出示例:括号内为说明
输入
3 (repeat=3)
2 (m=2)
8 (m=8)
90 (m=90)
输出
2 = 2
8 = 2*2*2
90 = 2*3*3*5
#include <stdio.h>
int prime(int m) /* 函数prime()定义 */
{
int i;
for(i=2; i<=m-1; i++) /* i为除数,取值范围是[2, m-1] */
{ if(m % i == 0) break; } /* 若m可以被i整除,则跳出循环,此时i值必定在范围[2, m-1]内 */
return i==m;
}
main()
{
int i, k, m;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++)
{ scanf("%d", &m);
printf("%d = ", m);
i = 2;
while(i <= m-1) /* 可能的质因数范围是:[2, m-1] */
{ /* 也可写成while(!prime(m)),即只要m不是素数就继续分解 */
if(!prime(i)||m % i != 0)/* 若i不是素数或i是素数,但是它不能整除n,所以尝试下一个值 */
{ i++; continue; }
printf("%d*", i); /* i是质因数。输出这个质因数 */
m = m / i; /* 继续对n / i的商分解质因数 */
}
printf("%d\n", m); /* 输出最后一个不能分解的因数 */
}
}