👤

Câte numere perfecte exista in tabloul x=(x1,...,xn) de numere întregi citite de la tastatura. Un număr este perfect dacă este egal cu suma divizorilor săi mai mici decât el.
Eu am încercat asa, dar imi da 0.


Câte Numere Perfecte Exista In Tabloul Xx1xn De Numere Întregi Citite De La Tastatura Un Număr Este Perfect Dacă Este Egal Cu Suma Divizorilor Săi Mai Mici Decâ class=

Răspuns :

Nu am mai folosit demult c,  dar  pt optimizare ptoi sa te duci pana la radical din x nu la x ...   sa zicem ca ai numaru 22 daca pana la 11 nu ai avea divizri de la 11 incolo tot nu ai si  ar trebui sa incerci de la 2 deoarece daca incepi de la 1 impartit la orice numar e tot numarul acela... i=2 ; i<sqrt(x)  if(numar % i ==) 
atunci nr++; daca nr ==0 atunci e numar prim
#include <bits/stdc++.h>

using namespace std;

int x,n,k;

unsigned long Sum(unsigned long a);

int main()
{

    cin >> n;

    for(int i=1;i<=n;i++)
    {
        cin >> x;
        if(Sum(x)==2*x) k++;
    }

    cout << k;

    return 0;
}

unsigned long Sum(unsigned long a)
{
   unsigned long sum = 1, k = 1, i;
   while ((a & 1) == 0)
   {
      k <<= 1;
      a >>= 1;
   }
   k = (k << 1) - 1;
   if (a == 1)
      return k;
   else
      sum = k;
   for(i = 3; i*i <= a; i += 2)
   {
      k = 1;
      while(a % i == 0)
      {
         k *= i;
         a /= i;
      }
      if (k > 1)
         sum *= ((k * i) - 1)/(i - 1);
   }
   if (a > 1)
      sum *= a + 1;
   return sum;
}