unlucky_13

Untitled

May 19th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. /*
  2.  Author                             :     unlucky_13
  3.  Problem_link                       :
  4.  Category                           :
  5.  Algorithm_Used                     :
  6.  
  7.  */
  8.  
  9. #include<cstdio>
  10. #include<sstream>
  11. #include<cstdlib>
  12. #include<cctype>
  13. #include<cmath>
  14. #include<algorithm>
  15. #include<set>
  16. #include<queue>
  17. #include<stack>
  18. #include<list>
  19. #include<iostream>
  20. #include<fstream>
  21. #include<numeric>
  22. #include<string>
  23. #include<vector>
  24. #include<cstring>
  25. #include<map>
  26. #include<iterator>
  27. #define i64 long long int
  28. //const long long int inf = 2147483647 ;
  29. //const int minx=;
  30. const i64 maxn=32000;
  31. using namespace std;
  32. //i64 phi[maxn] ;
  33. /*
  34. void sieve()
  35. {
  36.    
  37.    
  38.     for(i64 i=0;i<=maxn;i++) phi[i]=i ;
  39.    
  40.     for(i64 i=2;i<=maxn;i++){
  41.         if(phi[i]==i){
  42.             for(i64 j=2;i*j<=maxn;j++)               // i is a factor of i*j
  43.                 phi[i*j] =(phi[i*j]-phi[i*j]/i) ;
  44.         }
  45.     }
  46.    
  47. }
  48. i64 gcd(i64 a,i64 b){
  49.     while(b>0){
  50.         a =a%b ;
  51.         a ^=b ; b ^=a ; a ^=b ;
  52.     }
  53.     return a ;
  54. }
  55.  
  56. i64 solve(i64 n)
  57. {
  58.     if(n<=maxn){
  59.         if(phi[n]==n) {
  60.             if(n==1) return 1 ;
  61.             return n-1 ;
  62.         }
  63.         else return phi[n] ;
  64.     }
  65.     i64 N = sqrt(n) ;
  66.     i64 res = n ;
  67.     for(i64 i=2;i<=N;i++){
  68.         if(n%i==0 && gcd(i,n/i)==1) return solve(i)*solve(n/i) ;
  69.     }
  70.    
  71.     return n-1 ; //this is a prime
  72.    
  73. }
  74. */
  75. int phi(int n){
  76.     if(n==1) return 0 ;
  77.     int res = n ;
  78.     if(n%2==0){
  79.         res-=res/2 ;
  80.         while(n%2==0) n/=2 ;
  81.     }
  82.    
  83.     for(int i=3;i<=sqrt(n);i+=2){
  84.         if(n%i==0){
  85.             res-=res/i ;
  86.             while(n%i==0) n/=i ;
  87.         }
  88.     }
  89.     if(n>1) res-=res/n;
  90.     return res ;
  91.    
  92. }
  93. int main() {
  94.    
  95.     freopen("C:\\Users\\Mazhar\\Desktop\\Text_Files\\in.txt", "r", stdin);
  96.     //sieve() ;
  97.     int n ;
  98.     while(1)
  99.     {
  100.         scanf("%d",&n) ;
  101.         if(!n) break ;
  102.         else printf("%d\n",phi(n)) ;
  103.     }
  104.  
  105.  
  106.  
  107.  
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment