[C言語]白駿2581:小数



構想


少数を探すのは以前の問題でやったので、心配しないで、ここでsumとminを考えます.
前の質問では、フィードバックによってすぐに問題を処理する方法を学習する「ソート・ストレージ」を行いました.今度はそうするつもりです.

  • 60~100個の複文を回す.少数を探す.合計をsum=sum+a(61)で計算するには61が必要です.

  • 続けて少数であれば、1行目は解決します.

  • minを要求してa値に初期化しifmin繰り返し文を返す必要がありますが、そうするといつも60を出力してしまうので、さらに悩みます.

  • minを遅らせることにしたが,先処理範囲に少数の場合はなかった.このため、flagをゼロに設定して初期化し、小数が見つかった場合はflag値を変更し、flag=0のときに小数がないことを示します.この時点で印刷され、この条件も終了します.

  • flagを使用したので、アイデアを思いつき、minは最初に発見した素数を指定しました.したがって、flag=1の場合、後続の内容に関心を持たずにminを指定できます.
  • 私が解読したコード

    #include <stdio.h>
    
    int main()
    {
        int a, b, i, sum, min, flag;
        scanf("%d %d", &a, &b);
        sum = 0;
        min = a;
        flag = 0;
        while (a <= b)
        {
            if (a >= 2)
            {
                int i = 2;
                while (i <= a)
                {
                    if (i == a)
                    {
                        sum = sum + a;
                        flag++;
                        if (flag == 1)
                            min = a;
                    }
                    if (a % i == 0)
                        break;
                    i++;
                }
            }
            a++;
        }
        if (flag == 0)
        {
            printf("-1");
            return 0;
        }
        printf("%d\n%d", sum, min);
    }

    他者コード

    #include <stdio.h>
    
    int main()
    {
    
        int m, n;
        int sum = 0;
        int min = 10001;
        scanf("%d %d", &m, &n);
        if (m == 1)
            m++;
        for (; m <= n; m++)
        {
            int check = 1;
            for (int j = 2; j <= m / 2; j++)
            {
                if (m % j == 0)
                {
                    check = 0;
                    break;
                }
            }
            if (check == 1)
            {
                if (min > m)
                    min = m;
                sum += m;
            }
        }
        if (sum == 0)
            printf("-1\n");
        else
        {
            printf("%d\n%d\n", sum, min);
        }
        return 0;
    }
    
    同じ論理を用いた.