紅茶は無糖

プログラミング勉強中 その他雑多なことも記録

素数かどうかを判定する

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

//素数を調べる
int main(void) {
  int n, s, i;
  //素数かどうかの判定に使用
  int r = 1;

  do {
    printf("素数かどうか調べたい2以上の自然数を入力してください > ");
    scanf("%d", &n);
  } while(n < 2);

  //入力した自然数の平方根を求める
  s = sqrt(n);

  //2以外の偶数は素数ではないため、条件分岐して奇数のみを素数かどうか判定する
  if(n == 2) { printf("%dは素数です\n", n); }
  else if ((n != 2) && (n%2 == 0)) {
    printf("%dは素数ではありません\n", n);
  }
  else {
    //奇数のみを調べるため、i+=2としている
    //例えばn=3の場合、s=1.732・・・となるため、i<=sが成り立たない
    //そのため、for文は実行されずにrは初期値の1のまま変わらず、
    //if(r == 1) { printf("%dは素数です\n", n); }の文が実行される
    for(i=3; i<=s; i+=2) {
      if(n%i == 0) {
        printf("%dは素数ではありません\n", n);
        //素数ではなかったため、rに0を代入し、ループを抜ける
        r = 0;
        break;
      }
      //iで割りきれなかったため、この時点では素数とみなしてrに1を代入し、
      //次のループへ
      else { r = 1; }
    }
    if(r == 1) { printf("%dは素数です\n", n); }
  }

  return 0;
}

実行結果
C:\Users\pc\c\shift_jis > gcc -o prime_number prime_number.c
C:\Users\pc\c\shift_jis > prime_number.exe
素数かどうか調べたい2以上の自然数を入力してください > 991
991は素数です