Buna ! As vrea si eu un program facut in c++ care sa respecte urmatoarea cerinta: Sa se afiseze primele n perechi de numere prietene( suma divizorilor primului numar este egala cu al doilea numar si invers).
Eu am incercat ceva de genul acesta :
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("date.in")
ofstream g ("date.out")
int n,k,s,s1,d,y,x,k,gasit;
f>>n;
while(k<n)
{
s=0;
s1=0;
for(d=2;d<=x;d++)
if(x%d==0)
s=s+d;
y=x+1;
while(gasit==0)
{
if(y==s)
{
for(d=2;d<=y;d++)
if(y%d==0)
s1=s1+d;
if(s1==x)
{
gasit=1;
k++;
g<<x<<" "<<y;
}
}
else
y++;
}
x=y;
}
return 0;
}
Imi puteti modifica programul meu (e facut in codeblocks,dar acum l am scris de pe telefon si nu stiu daca l am copiat perfect.)Am dat 100 de puncte deoarece as dori si explicatii langa anumite linii din program ( se fac cu "///" sau "//").Multumesc anticipat.
Răspunsuri la întrebare
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("date.in");
ofstream g ("date.out");
int main(){
int n,k,s,s1,d,x=2;
f>>n;
while(n>0){
s=0;
s1=0;
//calculam suma divizorilor primului numar
for(d=1;d<=x;d++)
if(x%d==0)s+=d;
//Stim ca al doilea numar trebuie sa fie egal cu suma divizorilor primului numar. Deci al doilea numar este s
for(d=1;d<=s;d++)
if(s%d==0)s1+=d;
//Verificam daca suma divizorilor celui de al doilea numar e egala cu primul numar
if(x==s1){
//Daca am gasit perechea afiseaza
g << x << " "<< s << endl;
//Decrementam valoarea de numere prietene care trebuie gasit cu 1
n--;
}
//Incrementam x cu 1
x++;
}
}
Sunt cateva probleme serioase cu programul (functia main lipseste, mare parte din variabile printre care x si y si gasit sunt neinitializate, nu are absolut niciun sens ca cautam y prin incrementari din momentul in care stim ca y = suma divizorilor primului numar, etc.