在 C 中打印数字的质因数
Printing prime factors of numbers in C
代码适合第一个数字并不断打印。我该如何解决这个问题?
int count = 0;
for (int i = 0; i <= 20; i++) {
for (count = 2; i > 1; count++) {
while (i % count == 0) {
printf("%d ", count);
i = i / count;
}
}
}
每次迭代中的值如下。
count = 0; i = 0;
不输入第二个for.
count = 0; i = 1;
不输入第二个for.
count = 0; i = 2;
输入第二个for。 count = 2;
2 % 2 == 0
- 输入 while.
i = 2 / 2;
1 % 2 == 1;
不输入 while.
- 回到第二个for -
count = 3;
,i = 1;
不进入第二个for。
- 回到第一个为-
i < 20;
,所以i = 2
.
count = 2; i = 2;
我们回到第 4 步,无限循环。
这可能就是您要找的 -
int j, count = 0;
for (int i = 20; i > 0; i--)
{
printf("\n%d: ", i);
for(count = 2, j = i; j > 1; count++)
{
while(j % count == 0)
{
printf("%d ", count);
j = j / count;
}
}
}
定义一个函数来检查给定数字 n
是否为质数:
bool is_prime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= n/i; ++i) // Doing i*i<=n may overflow
if (n % i == 0) return false;
return true;
}
然后这样称呼它:
for (int i = 0; i <= 20; i++)
if(is_prime(i))
printf("%d\n", i);
或更直接(即没有函数):
int main(void)
{
int mark;
for (int n = 2; n <= 20; n++) {
mark = 1;
for (int i = 2; i*i <= n; ++i)
if (n % i == 0) mark = 0;
if (mark) printf("%d\n", n);
}
}
代码适合第一个数字并不断打印。我该如何解决这个问题?
int count = 0;
for (int i = 0; i <= 20; i++) {
for (count = 2; i > 1; count++) {
while (i % count == 0) {
printf("%d ", count);
i = i / count;
}
}
}
每次迭代中的值如下。
count = 0; i = 0;
不输入第二个for.count = 0; i = 1;
不输入第二个for.count = 0; i = 2;
输入第二个for。count = 2;
2 % 2 == 0
- 输入 while.i = 2 / 2;
1 % 2 == 1;
不输入 while.- 回到第二个for -
count = 3;
,i = 1;
不进入第二个for。 - 回到第一个为-
i < 20;
,所以i = 2
. count = 2; i = 2;
我们回到第 4 步,无限循环。
这可能就是您要找的 -
int j, count = 0;
for (int i = 20; i > 0; i--)
{
printf("\n%d: ", i);
for(count = 2, j = i; j > 1; count++)
{
while(j % count == 0)
{
printf("%d ", count);
j = j / count;
}
}
}
定义一个函数来检查给定数字 n
是否为质数:
bool is_prime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= n/i; ++i) // Doing i*i<=n may overflow
if (n % i == 0) return false;
return true;
}
然后这样称呼它:
for (int i = 0; i <= 20; i++)
if(is_prime(i))
printf("%d\n", i);
或更直接(即没有函数):
int main(void)
{
int mark;
for (int n = 2; n <= 20; n++) {
mark = 1;
for (int i = 2; i*i <= n; ++i)
if (n % i == 0) mark = 0;
if (mark) printf("%d\n", n);
}
}