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
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
atunci nr++; daca nr ==0 atunci e numar prim
iovitugeorge:
si pt fiecare element sa apelezi metoda perfect
Răspuns de
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;
}
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;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Istorie,
8 ani în urmă
Matematică,
8 ani în urmă
Informatică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă