2016-04-05 11 views
-1

iki mükemmel sayının toplamını döndürür yoktur.nasıl iki tamsayı argüman, <code>i</code> ve <code>j</code> alır ve <code>ith</code> ve <code>jth</code> mükemmel sayının toplamını döndüren <code>henry</code> adında bir yöntemi var 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; 
} 

bana bu çözmek için ipucu verin: 6 böyle mükemmel numarasını yazdırmak için biliyorum 1st perfect number ve 4963rd perfect number ve 6 + 496 = 502.

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

olduğunu, çünkü Örneğin, henry(1, 3)502 dönmelidir sorun, teşekkürler.

+0

için j' argümanlar 'Burada kullanmış algoritma çok yavaş ve seni' I' değiştirerek 4'ten fazla (6, 28, 496, 8128) – 0xEDD1E

+0

Başlat bulamaz düşünmek ve "Henry", "i" ve "b" gibi, "henry" 'de uygulanacak olan mükemmel toplam testinizde kullanılan "i" ve "j" ile çakışmayan başka bir şeye. Daha sonra nasıl çözüleceği daha açık olabilir. –

cevap

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

Eğer 'i == j' işleviniz' 2 * ith perfect_number' yerine 0h perfect_number' döndürürse –

+0

..and: '' + ++ 'arttırmadan sonra' s' –

+0

Daha net biçimlendirme (ve taşma tespiti) kullanabilir - Bunun dışında güzel cevap. – chux

İlgili konular