1

ユーザーが入力した数値の最大の素因数を見つけようとしています。

これまでのところ、私は持っています:

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int N;
    printf("Enter a positive number: ");
    scanf("%d", &N);
    int divisor = 1;

    for (int i = 2; i <= N; i++){
        if (N % i == 0){
            for (int j = 2; j < i; j++){
                if (i % j == 0 && j != i){
                    break;
                }
                else{
                divisor = i;
                }
            }
        }
    }
    printf("%i\n", divisor);
    return EXIT_SUCCESS;
}

しかし、これはうまくいかないようです。別のアプローチを試すのではなく、上記のアプローチが機能しない理由を最初に理解しようとしています。

上記のコードは、最初に数値 i がユーザー入力の数値で割り出せるかどうかをチェックし、次に i が素数であるかどうかをチェックし、プロセス全体を繰り返して、より大きな素数が存在するかどうかを確認することにより、すべての可能な素因数を反復することになっています。要因。ただし、ユーザーが入力した数値を常に返すため、機能しません.Nは素因数を与える場合があり、ほとんどの場合、Nまたは他の非素数を返します。

4

7 に答える 7

2
for (int i = 2; i <= N; i++){ // outer loop
    if (N % i == 0){
        for (int j = 2; j < i; j++){ // inner loop
            if (i % j == 0 && j != i){
                break;
            }
            else{
            divisor = i;
            }
        }
    }
}

外側のループの最後の反復でiは、 に等しくなりNます。状態(N % i == 0)は良好ですtrue。私たちは内側のループにいます。j状態によっては中古品(i % j == 0 && j != i)となりますfalse。私たちはelse節にいます。だから、divisor = N

于 2013-04-27T08:57:57.380 に答える
2
else {
    divisor = i;
}

これは良くない。これは、除数が実際に素数であるかどうかをチェックし、素数である場合、入力数値も除算し、それをdivisor変数に割り当てます。実際には、これは起こりません。代わりに、これは、素数ではないa に遭遇するたびに、 jtoの現在の値を代入します。代わりに、数値のすべての素因数を昇順にチェックしてから、最後の要素を選択する必要があります。divisorj

puts("Enter a positive integer:");
char buf[128];
fgets(buf, sizeof(buf), stdin);
unsigned n = strtoul(buf, NULL, 10);

unsigned d = 2, maxd = 1, orig = n;

while (d <= orig) {
    while (n % d == 0) {
        n /= d;
        maxd = d;
    }

    d++;
}

printf("\n\nMaximal prime factor: %u\n", maxd);
于 2013-04-27T09:00:01.247 に答える
0

i = N/2 以下の最大整数から開始して、ループを逆方向に処理できます。i が因数かどうかを確認し、素数かどうかを確認し、そうであればそれを返します。

于 2014-02-09T22:35:06.603 に答える
0

数字自体まで、数字のすべての約数を見つけようとします。(これは常にそれ自体の約数です)。次に、除数が素数かどうかを確認するために、2 から i-1 までのすべての数値を除算します。除数が見つかった場合は正しく停止しますが、j が除数でない場合は、i が素数であると言います (そしてそれを最大の除数として保存します)。

于 2013-04-27T09:02:17.133 に答える