C++求素数问题
黄舟
黄舟 2017-04-17 14:19:33
0
2
1034

/第七行中如果写成:for(m=1;m<=100;m=m+2)然后底下删去十一和十二行, 就可以输出除2外所有素数/
//那么如果要输出加上2的素数,我的这个程序错在哪(输出结果是2、3交替不停输出,都看不清

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int m,n,k;
    for(m=1;m<=100;m=m+1)//7
    {   bool prime=true;
        k=int(sqrt(float(m)));
        for(n=2;n<=k;++n)
        {if (m=2)//11
        break;//12
        else if(m%n==0)
        {prime=false;
        break;}
        }
        if (prime==true)
            cout<<m<<endl;

    }
    return 0;
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
Ty80

どこにエラーがありますか?

リーリー

この行のエラーにより、最初に出力される値は 1 になり、その後 2 と 3 が交互に表示されます。

なぜですか?まず、m==1 は内側の for ループには入りませんが、この時点では primetrue なので、1.

を出力します。

m==2m==3 が使用される場合、どちらも内部の for ループに入らず、出力されます。

その後、m==4 になると、内側の for ループに入りますが、if (m=2) ステップで m が 2 に設定され、ループを終了します。この時点では、prime はまだ true です。重複して印刷されます。

すると、m 次のサイクルは 3 (2 1) になり、このとき 3 が繰り返し出力されます。

すると、あなたも私も理解しています、

それはすべてを抜け出すことのできないサイクルに陥ることになります。m==4

エラーの解決

リーリー

それは非常に簡単です。まず、

m=2 に変更します。次に、1 が出力されるのを避けるために、外側の for を 2 から直接開始することをお勧めします。 m==2その他の提案

    コードのレイアウトは非常に重要であり、読みやすさに影響します。独自のロジックを用意し、できるだけ美しく配置することをお勧めします。
    • 透明なレイヤーを使用することをお勧めします (内側のブロックをインデントすることを忘れないでください)
    • コードを詰め込みすぎないようにしてください
    • 個人的には、単一行の
    • にも

      を追加することをお勧めします。統一されていて読みやすく、問題が起こりにくい if/else/for{}

  1. 関数を抽出して作成してみることができます
  2. 次にエラーが発生した場合は、コンピューターをシミュレートしてループを 2 ~ 3 回実行すると、問題を簡単に見つけることができます。

私が回答した質問

: Python-QA

いいねを押す +0
伊谢尔伦

for(int i=2;i if(n%i==0){

リーリー

}
}
true を返す;

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート