下面是我写的代码。
请告诉我为什么我的代码没有工作,即使经过很长一段时间后执行。
我是在num = 4
的条件下这么做的,我用的是最新版本的Xcode,M2 MacBook Air。
#include <stdio.h>
int main() {
int num = 0;
printf("Enter the number of prime numbers you want to find : ");
scanf("%d", &num);
int prime[num], store = 0, load = 0, dividend = 1, signal = 1, i;
prime[0] = 2;
while (store < num) {
for (load = 0; load < store; load++) {
if (dividend % prime[load] == 0) {
signal = signal * 0;
}
}
if (signal == 1) { // if 'dividend' value is a prime number, store dividend in the array of 'prime'.
prime[store] = dividend;
store++;
}
signal = 1;
dividend++;
}
for (i = 0; i < num; i++) {
printf("%d \n", prime[i]);
}
return 0;
}
/*
signal == 1 : prime
signal == 0 : not prime
1. prime[load] == NALL
2. for any value in the array 'prime', 'dividend % prime[load] != 0' //dividend is prime number
signal * 0
*/
开玩笑的一秒钟前,我问chatGPT这个问题。它告诉我“这个方法已经过时了。你可以使用其他方法像 * 埃拉托色尼筛 *。"但至少,如果我的代码没有问题,它必须运行。
3条答案
按热度按时间r6vfmomb1#
存在多个问题:
prime[0] = 2
并从dividend = 3
开始时,store
应初始化为1
。您可以从2
开始并删除prime[0]
的初始化。signal
不是主要指示器的好名称:composite
更显式。还建议在找到因子后立即中断循环。load
和composite
局部于循环并在开始时初始化将不易出错。以下是修改后的版本:
请注意,没有必要测试所有的素因子。内部循环测试可以更改为:
8oomwypt2#
你应该声明store = 1,因为有一个数字存储在素数数组中。我认为导致无限循环的原因是,通过声明dividend = 1将导致1进入素数数组,而每个数字都可以被1整除,导致算法检测不到更多的素数。你应该声明dividend = 3(省略2,因为已经在数组中)。
还有一件事
signal = signal * 0
等于to signal = 0
s5a0g9ez3#
你的代码有不止一个问题。例如int prime[num] ;你应该创建动态内存分配或者使它成为int prime[常量值]。最好试着调试它:)下面是关于查找质数的简单代码示例。
programiz.com/c-programming/examples/prime-number