Jump to content

Problema C++ Numere Perfecte Mai Mici Decat O Valoare Data


Courage

Recommended Posts

  • Moderators

Un numar este patrat perfect daca este egal cu suma divizorilor sai(exclusiv el).
Exemplu: 6=1+2+3. Afisati toate numerele perfecte mai mici decat o valoare data.

 

În code::blocks nu-mi afişează nimic :(. (nu înţeleg ce nu am făcut bine)

 



#include <iostream>
using namespace std;
int main()
{
    unsigned n,d,i,s;
    cout<<"n= ";
    cin>>n;
    s=0;
    for (i=1;i<=n;i++)
    {
        for (d=1;d<=i/2;d++)
        {
            if (i%d==0)
            {
                s=s+d;
            }
            if (i==s)
            {
                cout<<i;
            }
        }
    }
    return 0;
}

 

 

Pentru a depista dacă un număr este perfect se foloseşte algoritmul următor:

 

#include <iostream>
using namespace std;
int main()
{
    unsigned n,s=0,d;
    cout<<"n= ";
    cin>>n;
    for (d=1;d<=n/2;d++)
    {
        if (n%d==0)
        {
            s=s+d;
        }
    }
    if (n==s)
    {
        cout<<"numarul este perfect";
    }
    else
    {
        cout<<"numarul nu este perfect";
    }
    return 0;
}
Link to comment
Share on other sites

  • 11 months later...

Salut, codul meu pentru gasirea numerelor perfecte pana la o valoare data n, este urmatorul. Dar am o problema, ii dau sa imi gaseasca toate numerele perfecte pana la 30. Pana la 30 sunt doar 2 numere perfecte: 6 si 28. Problema codului meu este ca il gaseste si pe 24 ca fiind numar perfect. In mod normal nu ar trebui sa il ia deoarece suma divizorilor este: 1+2+3+4+6+8+12 dar algoritmul meu imi verifica suma imediat cum imi aduna urmatorul divizor de aceea el nu mai apuca sa adune si termenul 12 la suma,. Prin urmare cand ajunge la 24 si ii calculeaza suma ajunge la penultimul pas cand S=1+2+3+4+6+8=24 il verifica si vede ca se potriveste.

 

#include<stdio.h>
#include<conio.h>
#include<math.h>
 
int main ()
    {
         int n, i, j,m,S=0;
         
         printf("n=");
         scanf("%d",&n);
         
         for(i=1;i<=n;i++)
         {
           
             S=0;
    
                             
             for(j=1;j<i/2;j++)
             {
                if(i%j==0)
                      {
                       S=S+j;
                       if(i==S)
                       printf("Nr.Perfect=%dn",S);
                         }
                       }
                       
                       }
                       
         getch();
         }
Link to comment
Share on other sites

Cel de-al 2-lea for (cel cu j) pune-l sa mearga pana la <=i/2. La tine nu va merge la 12 in cazul numarului 24.(24/2=12 iar la tine e <i/2 deci merge pana la 11).

Mai scoate si acea verificare( if(i==S) ) din if-ul cu calcularea sumei. In cel de-al dolea for calculezi suma si dupa verifici daca suma este egala cu i.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.