1

正の偶数(2より大きい)を取り、この数になる最小の素数のペアを与えるコードを書きたいと思います。9桁までの整数を処理するには、このプログラムが必要です。

私の目的は、次のようなものを作成することです。

Please enter a positive even integer ( greater than 2 ) :
10
The first primes adding : 3+7=10.
Please enter a positive even integer ( greater than 2 ) :
160
The first primes adding : 3+157=160.
Please enter a positive even integer ( greater than 2 ) :
18456
The first primes adding : 5+18451=18456.

stdio.h以外のライブラリは使いたくない。配列、文字列、または最も基本的なツールボックス以外のものを使用したくありません:scanf、printf、for、while、do-while、if、else if、break、continue、および基本演算子(<、>、 ==、= +、!=、%、*、/など)。他の関数、特にis_primeは使用しないでください。

有効なエントリが与えられるまでループするように、入力を自分のニーズに制限する方法を知っています。

だから今、私はアルゴリズムを理解しようとしています。

私は次のようなwhileループを開始することを考えました:

  #include <stdio.h>
long first, second, sum, goldbach, min;
long a,b,i,k; //indices

int main (){

    while (1){
        printf("Please enter a positive integer :\n");
        scanf("%ld",&goldbach);
        if ((goldbach>2)&&((goldbach%2)==0)) break;
        else printf("Wrong input, ");
        }

    while (sum!=goldbach){
        for (a=3;a<goldbach;a=(a+2))
            for (i=2;(goldbach-a)%i;i++)
                first = a;
        for (b=5;b<goldbach;b=(b+2))
            for (k=2;(goldbach-b)%k;k++)
        sum = first + second;
        }
}
4

1 に答える 1

2

素数性をテストする機能を持っている

int is_prime(unsigned long n)

そして、あなたはagoldbach - aが両方とも素数であるかどうかをテストする必要があるだけです。もちろん、あなたは仮定することができますa <= goldbach/2

そして、goldbach = 4正しく処理するようにしてください。

要件で独自の関数の定義と使用が許可されていない場合は、最初にそれらを無視してください。便利で便利だと思われる機能を使用して問題を解決します。許可されていない機能を使用する実用的なソリューションがある場合は、それを許可された構成に置き換え始めます。自己定義関数は直接インライン化してreturn、を割り当てに置き換えることができるため、の代わりに、が素数であるif (is_prime(a))かどうかを判断するコードがあり、結果を割り当てる代わりに、割り当ててその変数をテストします。ライブラリ関数を使用した場合は、自分で再実装し(効率はそれほど重要ではありません)、インライン化します。areturnis_prime = result;if (is_prime)

于 2012-04-10T11:23:45.723 に答える