算出0到1000之间的素数?

时间:2014-04-18 20:46:11

标签: c

我正在尝试制作一个可以计算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;
}

5 个答案:

答案 0 :(得分:1)

问题出在表达式i % i上。在循环的第一次迭代中,i0,因此您将除以零。

答案 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开始循环,代码也会为您提供 1999之间的每个整数,用于表达式

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代码可以帮助您实现以下目的:

  1. 计算0到给定数量(上限)
  2. 范围内的素数总数
  3. 了解每个数字是否为素数
  4. 素数的完整列表属于指定范围

    素数= [] 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)))

  5. 如果您不希望显示非素数,那么您可以注释掉#print('{} -> Not prime'.format(n))这一行,如果您甚至不想知道所有素数也会对连续的打印语句进行评论即#print('{} -> Prime'.format(n))