[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;
}
同じ論理を用いた.Reference
この問題について([C言語]白駿2581:小数), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-2581-소수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol