分解质因数以36举例
1) x = 36, i = 2, x能够被i整除, 进入while循环;
2) while循环会执行两次, 完毕后x = 9, p = 2,此时x已不能够被i = 2整除。输出 “2 2”;
3) x = 9, i = 3, x能够被i整除, 进入while循环;
4) while循环会执行两次, 完毕后x = 1, p = 2, 输出”3 2”;
5) 此时x = 1 小于 i = 3退出for循环。
结果代表 36 = 2^2 * 3^2.
#include <cstdio>
void divide(int x)
{
for (int i = 2; i <= x / i; i ++ )
{
if (x % i == 0)
{
int p = 0;
while (x % i == 0) x /= i, p ++ ;
printf("%d %d\n", i, p);
}
}
if (x > 1) printf("%d %d\n", x, 1); //大于根号x的质因数只有一个
puts("");
}
int main()
{
int n;
scanf("%d", &n);
while (n -- )
{
int x;
scanf("%d", &x);
divide(x);
}
return 0;
}