gpt4 book ai didi

c - 与素数相关的输出

转载 作者:行者123 更新时间:2023-12-02 03:01:13 24 4
gpt4 key购买 nike

下面只写了函数

素因子的函数

void prime(int x) {
int i, j;

写这个是因为它想要信息但没有任何信息

    for (i = 2; i <= x; i++) {
if (x % i == 0) {
for (j = 2; j <= i; j++) {
if (i == j) {
printf("%d", i);
} else
if ((i % j) != 0) {
printf("%d\n", i);

输出应该是数字的素数,重复的素数也应该可以看到,所以通过乘法我们得到原始数字

                    goto l;

这里 goto 语句脱离了 if 循环

                } else {
break;
}
}
l:
x = x / i;
}
}
}

代码似乎是正确的,也给出了质数,但这些因子并没有重复。

例如:24 输出应为 2,2,3 但输出为 2,3

最佳答案

goto 语句是无用的,它完全等同于您的案例中的 break 语句。它不会跳出 if 循环,它会跳出 for 循环,这正是 break 确实如此。

此外,内部循环是无用的:如果您将 x 除以 i,您实际上从 x 中删除了较小的素数,并且 x % i == 0 仅适用于 i 的素数。

输出中的问题来自这样一个事实,即使 xi 的倍数,您也会递增 i。因此,您只打印一次质因数,而不会从 x 中完全删除它。

函数因此可以简化为:

void primefactors(int x) {
int i;

for (i = 2; i <= x;) {
if (x % i == 0) {
printf(" %d", i);
x = x / i;
} else {
i++;
}
}
printf("\n");
}

函数可以做得更快:当 i 大于 x 的平方根时可以停止扫描:

void primefactors(int x) {
int i;

for (i = 2; i * i <= x;) {
if (x % i == 0) {
printf(" %d", i);
x = x / i;
} else {
i += 1 + (i & 1); // skip even numbers
}
}
printf("%d\n", x);
}

关于c - 与素数相关的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com