-2

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

#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....

我做错了什么?

4

5 回答 5

5

你可能想要:

int prime(int n){
    int j;
    for (j=2;j<=n/2;j++)
        if((n%j)==0)
            return 0;
   return 1;
}
于 2012-10-15T09:08:14.083 回答
2

素数是只能被两个数整除的数。例如 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();
}
于 2012-10-15T09:14:23.967 回答
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;
}
于 2012-10-15T09:16:38.270 回答
0

如果您试图找出不超过给定数字(在您的情况下为 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;
}
于 2012-10-15T10:11:49.633 回答
-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;

}
于 2013-03-06T16:44:08.337 回答