Совершенным называется натуральное число, равное сумме всех своих делителей (за исключением самого себя). Например: 28= 1 + 2 + 4 + 7 + 14
Только на С++
Самый тупой, но работающий алгоритм: #include "iostream" int main() {long int k,n,s; ffm:s=0; cout<<"
Натуральное число n>=2 ?"; cin>>n; for(k=1;k<=n/2;k++) if(n%k==0)s+=k; if(s==n)cout<<n<<" простое число !"; else cout<<n<<" простым числом не является !";goto ffm;}
#include "iostream" using namespace std; int main(){ int i,j,s; cin>>i; s=0; for(j=1;j<i;j++)if(i%j==0)s+=j; cout<<boolalpha<<(i==s)<<endl; cin.get(); cin.get();}
а на сколько оптимизированную надо? я могу перебором вариантов сделать, как простой вариант, но это плохо оптимизированный вариант, хоть и незаметный в работе с маленькими числами до тысячь 10-ти