Informatică, întrebare adresată de mili69, 9 ani în urmă

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.

Anexe:

Răspunsuri la întrebare

Răspuns de iovitugeorge
1
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

iovitugeorge: si pt fiecare element sa apelezi metoda perfect
iovitugeorge: care primeste ca parametru un x si verifica daca e perfect sau nu
iovitugeorge: daca e perfect il adaugi la suma
iovitugeorge: functia perfect for(int i=2 ;i< sqrt(x) i++ ) if (x% i ==0 ) nr ++ if nr==0 atunci este prim
iovitugeorge: si poti sa returnezi 1 daca e prim 0 daca nu e
iovitugeorge: si pt forul din main for (i=1 ;i<= n;i++)
iovitugeorge: if(perfect(x[i])) nr_prime++
mili69: O sa încerc asa, mersi
iovitugeorge: printf("sunt atatea numere prime:"+nr_prime);
iovitugeorge: sa imi zici daca iti merge
Răspuns de stassahul
1
#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;
}

stassahul: Se poate si fara functia ceea mare, dar nu stiu daca te vei incadra in time limit.
stassahul: Referitor la programul tau, mai bine ai fi scris totul in main si fara vectori si cred ca iti va dadea correct
Alte întrebări interesante