我正在尝试制作一个可以计算0到1000之间的素数的程序,编译器说它没有警告也没有错误,但是当我运行程序时它给了我一个执行错误,我没有ideia它是什么,有人可以看看我的代码??
注意:我是编程的初学者。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i=0;
for (i=0;i<1000;i++){
if (i % 1 == 0 && i % i == 0){
printf("%d",i );
}
printf(" ");
}
return 0;
}
答案 0 :(得分:1)
问题出在表达式i % i
上。在循环的第一次迭代中,i
为0
,因此您将除以零。
答案 1 :(得分:0)
您应该从1迭代到1000,因为不允许除以0并且它会给出浮点异常。 此外,您的算法不正确。 使用此处的代码: http://www.programmingsimplified.com/c/source-code/c-program-for-prime-number
答案 2 :(得分:0)
您正在
中执行除法i % i == 0
代表i = 0
。
此外,即使您从i = 1
开始循环,代码也会为您提供 1
和999
之间的每个整数,用于表达式
i % 1 == 0 && i % i == 0
只要i != 0
,就为真。这是一个固定的算法(不是最有效的,不可否认):
#include <stdio.h>
int main(){
int i; /* no need to initialize to zero */
int j; /* we need a second counter */
for (i=2;i<1000;i++){ /* start from 2 -- one is not prime */
for (j=2;j<i;j++){ /* check for nontrivial divisors */
if (i % j == 0) {
break; /* nontrivial divisor found -> not a prime */
}
}
if (j == i) { /* this means the cycle above run till end */
printf("%d ",i ); /* hence no nontrivial divisors, hence a prime */
}
}
printf("\n");
return 0;
}
答案 3 :(得分:0)
当我为0时会发生什么?我的猜测是你要在1开始你的循环(以及修复你的素数检查)。
答案 4 :(得分:0)
下面的python代码可以帮助您实现以下目的:
素数的完整列表属于指定范围
素数= [] limit = int(输入(&#39;最大限制是多少?&#39;))
对于范围内的n(2,限制+ 1): for x in range(2,n): 如果n%x == 0: print(&#39; {} - &gt; Not prime&#39; .format(n)) 打破 其他: primes.append(n)的 打印(&#39; {} - &gt; Prime&#39; .format(n))
打印(素数) print(&#39; Total {} primes found&#39; .format(len(primes)))
如果您不希望显示非素数,那么您可以注释掉#print('{} -> Not prime'.format(n))
这一行,如果您甚至不想知道所有素数也会对连续的打印语句进行评论即#print('{} -> Prime'.format(n))