2016-04-05 12 views
-1

に2つの完全数の合計を返します。は、どのように私は2つの整数の引数、<code>i</code>と<code>j</code>を取り、<code>ith</code>と<code>jth</code>完全数の合計を返し<code>henry</code>という名前のメソッドを持つC

int main() 
{ 
    int i, j, n, sum = 0; 

    /* Reads upper limit to print perfect numbers upto */ 
    printf("Enter any number to print perfect number up to: "); 
    scanf("%d", &n); 



    printf("\nAll Perfect numbers between 1 to %d:\n", n); 


    /* 
    * Iterates from 1 to n and print if it is perfect number 
    */ 
    for(i=1; i<=n; i++) 
    { 
     sum = 0; 

     /* 
     * Checks whether the current number i is Perfect number or not 
     */ 
     for(j=1; j<i; j++) 
     { 
      if(i%j==0) 
      { 
       sum += j; 
      } 
     } 

     /* If the current number i is Perfect number */ 
     if(sum == i) 
     { 
      printf("%d is Perfect Number\n", i); 
     } 
    } 

    return 0; 
} 

は私がこれを解決するためのヒントを与えてください:6は、私はこのような完璧な番号を印刷する方法を知っている1st perfect number4963rd perfect number6 + 496 = 502.

int henry (int i, int j) 
{ 
     //how do i start 
} 

であるので、例えば、henry(1, 3)502を返す必要があります問題、ありがとう。

+0

あなたがここで使用しているアルゴリズムは非常に遅いです、と私はあなたが 'i'と' j'引数を変更することにより、4つ以上(6、28、496、8128) – 0xEDD1E

+0

スタートを見つけることができませんだと思います'henry'に実装しなければならない完全和検定で使われた' i'や 'j'と衝突しない' a'や 'b'のようなものです。その後、それを解決する方法がより明確になるかもしれません。 –

答えて

1
int henry(int i,int j) 
{ 
int count=0,k=1,s=0; 
    while(count<=i || count<=j) 
    { 
    int sum=0; 
    for(p=1; p<=k/2; p++) 
    { 
     if(k%p==0) 
     { 
      sum += p; 
     } 
    } 
    if(sum==k) 
    count++; 
    if(count==i||count==j) 
    s+=k; 
    k++; 
    } 
if(i!=j) 
return s; 
else 
return 2*s; 
} 
+0

'i == j 'の場合、関数は' 2 * ith perfect_number'の代わりに 'ith perfect_number'を返します –

+0

..' 'sをインクリメントした後' k ++'にする必要があります –

+0

より明確な書式設定(およびオーバーフロー検出)素敵な答えです。 – chux

関連する問題