我试图使用for循环找到素数1-n

时间:2014-04-24 15:00:41

标签: c for-loop

我试图找到素数而且似乎我犯了错误,但我几个小时都找不到它 这是我的代码:

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

int main(){

    int n,a,b;
    printf("enter a number=> \n");
    scanf("%d",&n);
    for(a=2;a<=n;a++){
        for(b==2;b<=a;b++){
            if(a%b==0){
            break;
            }else{printf("Prime number: %d\n",a);}

        }
    }
    return 0;
}

b假设增加但不增加,我也分配了b == 2但它打印出b = 1

3 个答案:

答案 0 :(得分:1)

更改

for(b==2;b<=a;b++)  
//    ^ Replace it with assignment operator '='  

for(b = 2; b*b <=a; b++)  
//          ^ Reduce the unnecessary loop iteration.

答案 1 :(得分:1)

代码中的

b == 2b2进行比较,如果它们都具有相同的值,则评估为1,如果它们的评估为0是不同的。

您似乎希望在那里进行分配,而不是b = 2

之后,您还应该考虑在更严格的情况下运行printf声明,而不是每次a % b都不等于0。例如,当b最终等于a - 1时,可能会出现更严格的情况。

您可以通过将代码更改为以下内容,以最少的更改完成所有操作:

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

int main( ){

    int n, a, b;
    printf( "enter a number=> \n" );
    scanf( "%d", &n );
    for ( a = 2; a <= n; a++ ){
        for ( b = 2; b <= a; b++ ){ // removed one = sign
            if ( a % b == 0 ){
                break;
            }
            else if ( b == a - 1 ) {    // added the if ( b == a - 1 )
                printf( "Prime number: %d\n", a );
            }

        }
    }
    return 0;
}

答案 2 :(得分:0)

您需要使用=代替==