Tranvick

Untitled

Jan 21st, 2012
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:65777216")
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <cmath>
  9. #include <vector>
  10. #include <set>
  11. #include <stack>
  12. #include <map>
  13. #include <queue>
  14. #include <string>
  15. #include <memory.h>
  16. #include <iterator>
  17. #define mem(A,X) memset(A,X,sizeof(A))
  18. #define memo(A) memset(A,0,sizeof(A))
  19. #define forn(I,B) for (int I=1;I<=(B);I++)
  20. #define forg(H,V) for (int H=first[V];h;h=next[H])
  21. #define rep(I,B) for (int I=0;I<(B);I++)
  22. #define labs(X) (((X)>0)?(X):(-(X)))
  23. #define ropen(X) freopen(X,"r",stdin)
  24. #define wopen(X) freopen(X,"w",stdout)
  25. #define rwopen(X) freopen(X".in","r",stdin);freopen(X".out","w",stdout)
  26. #define pb push_back
  27. #define mp make_pair
  28. #define all(X) (X).begin(),(X).end()
  29. #define sqr(X) ((X)*(X))
  30.  
  31. using namespace std;
  32.  
  33. typedef pair <int,int> pii;
  34. typedef pair <long long,long long> pll;
  35. typedef double ld;
  36. typedef long long ll;
  37. typedef vector<int> vi;
  38. const int N=111111;
  39. const int INF=111111111;
  40. const double eps=1e-9;
  41. const double pi=3.14159265358979;
  42.  
  43. ll x,d[N],c[N],ans,q[N];
  44. int n,ptr;
  45.  
  46. int main(){
  47.     rwopen("bigsum");
  48.     scanf("%I64d",&x);
  49.     for (ll i=1;i*i<=x;i++)
  50.         if (x%i==0){
  51.             d[++n]=i;
  52.             d[++n]=x/i;
  53.         }
  54.     if (d[n]==d[n-1]) --n;
  55.     sort(d+1,d+n+1);
  56.     forn(i,n){
  57.         ptr=0;
  58.         forn(j,i)
  59.                 if (d[i]%d[j]==0){
  60.                 q[++ptr]=d[j];
  61.                 c[ptr]=x/q[ptr];
  62.             }
  63.         for (int j=ptr;j;j--){
  64.             for (int k=j-1;k;k--) if (q[j]%q[k]==0) c[k]-=c[j];
  65.             ans+=q[j]*c[j];
  66.         }
  67.     }
  68.     printf("%I64d\n",ans);
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment