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

时间:2012-10-15 09:04:40

标签: c loops primes

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

#include <stdio.h>
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 ....

我做错了什么?

5 个答案:

答案 0 :(得分:5)

你可能想要:

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

答案 1 :(得分:2)

Prime数字是只能被两个数字整除的数字。例如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();
}

答案 2 :(得分:1)

试试这个:

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;
}

答案 3 :(得分:0)

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

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

#include <stdio.h>
#include <math.h>

/* 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;
}

答案 4 :(得分:-1)

代码:

#include <stdio.h>

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;

}