C使用For语句显示素数

时间:2013-11-28 19:45:45

标签: c loops for-loop

我是C新编程的新手,大约一周前开始!我正在进入循环,我遇到了编写C程序以显示质数小于100的问题。 我将分享我编写的C代码及其输出!我会等你的帮助和你的评论

    #include<stdio.h>

    main(){

    int i,d,k;

    for( i=1 ; i<=100 ; i++ ){
        d=0;
        for( k=1 ; k<=i ; k++ ){
            if( i%k==0){
                d=d+1;
            }
        }
        if( d==1 ){
            printf("\n%d",i);
        }
    }

    getchar();
    getchar();

    }

输出:

  1

Thanx!

5 个答案:

答案 0 :(得分:2)

这里你去...例如5有因素(1和5):

#include<stdio.h>

    main(){

    int i,d,k;

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

    getchar();
    getchar();

    }

答案 1 :(得分:1)

#include<stdio.h>

main(){

    int i,d,k;

    for( i=1 ; i<=100 ; i++ ){
        d=0;
        for( k=1 ; k<=i ; k++ ){
            if( i%k==0){
                d=d+1;
            }
        }
        if( d==1 ){
            printf("\n%d",i);
       }
   }

   getchar();
}

答案 2 :(得分:0)

使用i = 2读取算法。

 d=0
 k=1 : 2%1=0 so d=1
 k=2 : 2%1=0 so d=2

所以2不是素数...... Alrggg

有许多方法可以纠正并使代码运行得更快。 如果我<100,那么为所有我计算sqrt(i)可能是“昂贵的”,但是不时做类似的事情将是一个好方法......

更多:找到除数后无需继续 更多:Eratosthenes是你的朋友...... 更多:较小的除数总是素数...商店? 更多:事实上看维基百科...... http://en.wikipedia.org/wiki/Primality_test 再见,

弗朗西斯

答案 3 :(得分:0)

main函数应该返回一个int:What should main() return in C and C++?

另外,考虑制作一个函数来测试一个数字是否为素数。这是一种更清洁的方法,但我猜你还没有学到它们。

您使用的算法根本没有效率。有很多方法可以改善它。

要纠正它,你应该知道素数有2个除数(除了1,但它不是素数):1和它本身。你的第二个for循环检查那些2,所以如果d是2而不是1,则数字是素数。

即使您是初学者,也应该尝试改进此算法。首先,直到sqrt(i)为除数检查就足够了。此外,当您找到除数时,您可以停止循环。此外,由于1始终是除数,因此您可以使用2开始第二个循环。

答案 4 :(得分:0)

您正在使用d作为flag来检测内部for循环期间数字是否可以被整除。正确使用它。每当no不可分割时,将flag设置为1表示它不是素数。如果flag不受内循环的影响,则表示number为prime。您还应该考虑从int函数返回main值,表示退出状态。

按如下方式更改代码。

  #include<stdio.h>
  main(){
     int i,d,k;
    for( i=2 ; i<=100 ; i++ ){
         d=0;
          for( k=2 ; k<i ; k++ ){
             if( i%k==0){
                d=1; //Set the flag to 1 indicating no. is not prime and break
                break;
             }
          }
         if( d==0){ //Means flag the was unaffected throughout the loop i.i. Prime
             printf("\n%d",i);
         }
     }
    getchar();
    return 0;
 }