関数を使用して数値が素数かどうかを判断する

方法 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;
}

 

 

おすすめ

転載: blog.csdn.net/woniuxyy/article/details/107200823