Advertisement
a53

inspectorat

a53
Oct 22nd, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int phi(int n) /// Functia Totient (indicatorul lui Euler)
  5. { /// Intoarce numarul de numere naturale mai mici decat n si prime cu n
  6. float rezultat=n; /// Initializa rezultat cu n
  7. for(int p=2;p*p<=n;++p) /// Consideram toti factorii primi ai n si pentru fiecare factor prim p, multiplicam rezultatul cu (1-1/p)
  8. {
  9. if(n%p==0) /// Verificam daca p este factor prim
  10. {
  11. while (n%p==0) /// Daca da, actualizam n si rezultatul
  12. n/=p;
  13. rezultat*=(1.0-(1.0/(float) p));
  14. }
  15. }
  16. if (n>1) /// Daca n are un factor mai mare decat sqrt(n) (poate exista cel mult un astfel de factor prim)
  17. rezultat*=(1.0-(1.0/(float) n));
  18. return (int)rezultat;
  19. }
  20.  
  21. int cmmdc(int a,int b)
  22. {
  23. int r=a%b;
  24. while(r!=0)
  25. a=b,b=r,r=a%b;
  26. return b;
  27. }
  28.  
  29. int main()
  30. {
  31. int n,x,y,d;
  32. cin>>n;
  33. while(n)
  34. {
  35. cin>>x>>y;
  36. if(x>y)
  37. swap(x,y);
  38. d=cmmdc(x,y);
  39. cout<<1ULL*phi(x)*phi(y)*d/phi(d)<<'\n';
  40. --n;
  41. }
  42. return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement