C中的素数

时间:2012-11-25 10:55:08

标签: c loops if-statement primes break

第一个程序

#include<stdio.h>

void main()
{
    int n,c;
    printf("enter a numb");
    scanf( "%i", &n);

    for( c = 2; c <= n; c++){
        if( n % c == 0 )
            break;
    }

    if( c == n )
        printf("\nprime\n");
    else
        printf("\nnot prime\n");
    getchar();
}

第二个计划

#include "stdio.h>

int main()
{
    printf("Enter a Number\n");
    int in, loop, rem, chk;
    scanf("%d",&in);

    for ( loop = 1; loop <= in; loop++){
        rem = in % loop;
        if( rem == 0)
            chk = chk +1;
    }
    if ( chk == 2 )
        printf("\nPRIME NUM ENTERED\n");
    else
    printf("\nNUM ENTERED NOT PRIME\n");
    getchar();
}

第二个程序有效,但第一个程序是我朋友写的那个程序,程序看起来很好但是通过单步检查它我们发现第一个程序中的if条件在每个输入下都会出现那么这里的逻辑错误请帮我找到......

3 个答案:

答案 0 :(得分:3)

如果我们在讨论第一个程序,那么读取整数n的方法就会出现问题。您需要传递其地址:

printf("enter a numb");
scanf("%i",&n);

我很惊讶您的编译器没有发现这一点。

答案 1 :(得分:2)

第一个条件错误:

       for(c=2;c<=n;c++)

你必须直到n / 2。在你的情况下,条件总是正确的,因为当c == n然后n%c等于0并且你到达休息时间。

素数的定义是它的唯一除数是1和它本身。

所以正确的陈述是:

for (c = 2; c < = n / 2; c++)

编辑:

事实上,在你到达trunc(sqrt(n))之后不应该有更多的除数。

     for (c=2; c < trunc(sqrt(n)) c++)

答案 2 :(得分:1)

您的程序逻辑是正确的。 问题出在你的scanf语句中......你需要传递变量的地址。 它应该是:scanf("%i",&n);