素数かどうかを判定する
# 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は素数です