在C中获得2到100之间的所有素数

这是我的代码,它只能输出素数。

#include  int prime(int n){ int j; for (j=2;j<=n/2;j++){ if((n%j)==0){ return 0; } else{ return 1; } } } void main(){ int i,p; for (i=2;i<=100;i++){ p=prime(i); if(p==1){ printf("%d \n",i); } } } 

结果是2,3,7,9,11,13,15 ….

不是2,3,5,7,11,13 ….

我做错了什么?

你可能想要:

 int prime(int n){ int j; for (j=2;j<=n/2;j++) if((n%j)==0) return 0; return 1; } 

素数是只能被两个数字整除的数字。 例如2,3,5,7,11等

 int main() { int i,j,n=0; for(i=2;i<=100;i++) { for(j=1;j<=i;j++) { if(i%j==0) { n++; } } if(n==2) printf("%d\n",i); n=0; } getch(); } 

试试这个 :

 int prime(int n){ int j; int isPrime = 1; for (j=2;j<=n/2;j++){ if((n%j)==0){ isPrime = 0; break; } } return isPrime; } 

如果你试图找出一个给定数字的Prime数字(在你的情况下为2..100),建立一个素数表将加快这个过程:

注意:输入是顺序的以帮助构建素数表非常重要。

 #include  #include  /* Building a prime table for fast look up * NOTE : Numbers should be input from 2 to n in a sequential pattern to help build prime table; */ # define PRIME_TAB_MAX 200 int prime_specific(int num) { static int primeTab[PRIME_TAB_MAX] = { 0, }; static int primeCount = 0; int check_limit ; unsigned int idx; if (num < 2) return 0; if (primeCount > 0) { check_limit = (int)sqrt(num); for (idx = 0; idx < primeCount && primeTab[idx] <= check_limit; idx++) { if (0 == (num % primeTab[idx])) { return 0; } } } else { for (idx = 2; idx <= num / 2; idx++) if (0 == (num % idx)) return 0; } if (primeCount < PRIME_TAB_MAX) { primeTab[primeCount++] = num; return 1; } else { fprintf(stderr, "\nERROR: Prime Table is full"); return (-1); //Internal error } } int main(void) { unsigned int idx; int status ; for (idx = 2; idx <= 1000; idx++) { status = prime_specific(idx); switch (status) { case 1: fprintf(stderr, "%d\n", idx); break; case 0: //Do nothing break; default: fprintf(stderr, "\nERROR:Internal Error"); return (-1); } } return 0; } 

码:

 #include  int main () { /* local variable definition */ int i, j; for(i=2; i<100; i++) { for(j=2; j <= (i/j); j++) if(!(i%j)) break; // if factor found, not prime if(j > (i/j)) printf("%d is prime\n", i); } return 0; }