2016-04-05 4 views
-1

Ich habe eine Methode namens henry, die zwei Integer-Argumente übernehmen, i und j und gibt die Summe der ith und jth perfekten Zahlen. Zum Beispiel sollte henry(1, 3)502 zurückkehren, weil 6 ist die 1st perfect number und 496 ist die 3rd perfect number und 6 + 496 = 502.Wie kehre ich die Summe von zwei vollkommenen Zahlen in C

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

Ich weiß, wie perfekt Zahl wie folgt drucken:

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

Bitte geben Sie mir andeuten, diese zu lösen Problem, danke.

+0

Der Algorithmus Sie hier verwendet haben, ist sehr langsam, und ich denke, Sie werden nicht mehr als 4 (6, 28, 496, 8128) – 0xEDD1E

+0

starten finden, indem Sie den 'I' ändern und 'J' Argumente für 'henry' zu etwas anderem, wie' a' und 'b', die nicht in Konflikt mit den' i' und 'j' stehen, die in deinem perfekten Sum-Test verwendet werden, der in' henry' implementiert werden muss. Es könnte dann klarer sein, wie man es löst. –

Antwort

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

Wenn 'i == j' Ihre Funktion gibt' ith perfect_number' anstelle von '2 * ith perfect_number' zurück –

+0

..und: Sie müssen' k ++ 'nach Inkrementieren' s' –

+0

Konkreter Formatierung (und Überlauferkennung) verwenden - Ansonsten nette Antwort. – chux

Verwandte Themen