

与えられたｎ以下で、異なる２つの自然数の組で、自分自身を除いた約数の和が、互いに等しくなるなるような数の組を例えば以下のように表示したいのですが、実行結果に何も出てきません。

**期待する実行結果:**

[code]

    $./a.out
    自然数ｎを入力してください：5000
    (220,284)→*220を除く約数の和は284で、逆に284を除く約数の和は220である*
    (1184,1210)
    (2620,2924)
    
[/code]

**現状の実行結果:**

[code]

    $ ./a.out
    整数 n を入力してください：5000
    
[/code]

作成したプログラムで、関数 `sum` は自然数aを除く約数の和は出力されていたため特にコンパイルを実行したとき問題なかったのですが（もちろん sum
関数確認時の main 関数は上記とは違います）、関数 `yuai` の作成方法が思いつきません。

ｎ以下の自然数で、自然数自身を除く約数の和とその自然数が等しくなるような自然数が存在するとき、その2つの数字はペアで出力されるプログラムを作成すべきだと考え、i
自身を除いた約数の和と ans, また ans 自身を除いた約数の和と i が等しかったとき出力されるべく

[code]

    for(i=1;i<n;i++)
        if(sum(i)==ans && sum(ans)==i)
    
[/code]

と記載したのですが、プログラムがうまく実行できなく、どのようにすればいいのか思いつかないので質問している次第です。  
sum 関数は正しいので、yuai 関数のどこをどのように修正すればいいのですか。回答よろしくお願いします。

* * *

**現状のソースコード:**

[code]

    #include <stdio.h>
    
    /* a の自身を除く約数の和を計算する関数 */
    int sum(int a)
    {
       int i, su;
       su=0;
       for(i=1; i<a; i=i+1) {
        if(a%i==0) {
          su=su+i;
         }
       }
        return su;
    }
    
    void print_yuai(int n)
    {
        int i,ans;
        ans=0;
        for(i=1;i<n;i++)
            if(sum(i)==ans && sum(ans)==i){
                printf("(%d,%d)\n", i, ans);
           }
    }
    
    int main(void)
    {
        int x;
    
        printf("整数 n を入力してください：");
        scanf("%d", &x);
        print_yuai(x);
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2020-10-16T03:50:21.140
71238
2020-10-16T06:22:36.743
2020-10-16T06:22:36.743
3060
41837
question
c
コンパイル結果が、何も出てきません


まずはデバッガの使い方を覚えましょう。そうすると質問→応答を待っている間に誤りがわかります。

ヒント１： 開始時点での `sum` の値っていくつですか？  
ヒント２： ループ内で `sum` の値は変わりますか？

某超大型掲示板サイトだと答えをすぐ見ないようスクロール領域が入るところ。

回答：最初 `sum` の値は `0` です。そして一度も更新されていません。更に、約数の和は決して `0` にならないので、最初の
`sum(i)==ans` が成立することは絶対にありません（つまり結果なし）

修正結果が欲しいですか？ とりあえずまずは自分で修正してみましょう。他人に頼りすぎると実力つかないです。


CC BY-SA 4.0
2020-10-16T04:36:18.290
71239
2020-10-16T04:36:18.290
8589
71238
answer