Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Metoda 1:
- int main()
- {
- int x,div;
- long long S=0;
- cin>>x;
- for (div=1; div*div < x; div++)
- if (x % div == 0)
- S = S + div + x/div;
- if ( div * div == x)
- S= S + div;
- cout<<S;
- return 0;
- }
- //Metoda 2: (de prosti, facuta de mine: faci produsul sumelor geometrice a unor progresii date de factorii primi ai
- // numarului ). Metoda este, totusi, eficienta.
- #include <iostream>
- #include <cmath>
- using namespace std;
- long long suma_geometrica(long long baza, long long exp)
- {
- if (baza==1)
- return (exp+1);
- long long s= (1- pow(baza,exp)*baza)/(1-baza);
- return s;
- }
- long long suma_divizori(long long x)
- {
- long long div=2,p,S=1;
- while (x != 1)
- {
- p=0;
- while (x % div == 0)
- {
- x=x/div;
- p++;
- }
- if (p) {
- S=suma_geometrica(div,p)*S;
- //cout<<div<<" la puterea "<<p<<" ";
- }
- div++;
- }
- return S;
- }
- int main()
- {
- long long x;
- cin>>x;
- cout<<suma_divizori(x);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment