方法 1:
#include<stdio.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(int x){
int ret = 1;
int i;
if(x == 1){
ret = 0;
}
for( i=2; i<x; i++){
if( x % i == 0){
ret = 0;
break;
}
}
return ret;
}
方法 2:
2 を除いて、他のすべての偶数は素数ではありません。
#include<stdio.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(int x){
int ret = 1;
int i;
if(x == 1 || (x % 2 == 0 && x != 2)){
ret = 0;
}
for( i = 3; i < x; i += 2){
if( x % i == 0){
ret = 0;
break;
}
}
return ret;
}
改善--->プログラムがより効率的に実行される
#include<stdio.h>
#include<math.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(int x){
int ret = 1;
int i;
if(x == 1 || (x % 2 == 0 && x != 2)){
ret = 0;
}
for( i = 3; i < sqrt(x); i += 2){
if( x % i == 0){
ret = 0;
break;
}
}
return ret;
}
方法 3:
アルゴリズム:
1. x を 2 とする
2. 2x、3x、4x から ax<n までの数値を非素数としてマークします。
3. 非素数としてマークされていない次の数値を x とし、すべての数値が試行されるまで 2 を繰り返します。
疑似コード:
1. prime[n] を開き、そのすべての要素を 1 に初期化します。Prime[x] は 1、つまり x が素数であることを意味します。
2. x=2 とする
3. x が素数の場合、(i=2;x*i<n;i++) では、prime[i*x]=0 とします。
4. x++ にします。x<n の場合は 3 を繰り返し、そうでない場合は終了します。
#include<stdio.h>
int main()
{
const int maxNumber = 25;
int isPrime[maxNumber];
int i;
int x;
//数组初始化1
for( i=0; i<maxNumber; i++){
isPrime[i] = 1;
}
for( x=2; x<maxNumber; x++){
if(isPrime[x]){
for(i=2;i*x<maxNumber;i++){
isPrime[i*x]=0;
}
}
}
for(i=2;i<maxNumber;i++){
if(isPrime[i]){
printf("%d\t",i);
}
}
printf("\n");
return 0;
}