tanasaradu

Untitled

Oct 25th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("pinex.in");
  5. ofstream fout("pinex.out");
  6. const int BMAX=1000005;
  7. const short BITMAX=22;
  8. bitset<BMAX>ciur;
  9. int prime[BMAX],k,ex[BITMAX],nexp,biti[BITMAX],query;
  10. inline void CIUR()
  11. {
  12. ciur[1]=1;
  13. for(int i=4;i<=BMAX-5;i+=2)
  14. ciur[i]=1;
  15. for(int i=3;i*i<=BMAX-5;i+=2)
  16. if(!ciur[i])
  17. for(int j=i*i;j<=BMAX-5;j+=2*i)
  18. ciur[j]=1;
  19. k=1;
  20. prime[k]=2;
  21. for(int i=3;i<=BMAX-5;i+=2)
  22. if(!ciur[i])
  23. {
  24. ++k;
  25. prime[k]=i;
  26. }
  27. }
  28. inline void D(long long x)
  29. {
  30. nexp=0;
  31. int i=1,d;
  32. d=prime[i];
  33. while(i<=k && 1LL*d*d<=x && x>1)
  34. {
  35. if(x%d==0)
  36. {
  37. ++nexp;
  38. ex[nexp]=d;
  39. while(!(x%d))
  40. x/=d;
  41. }
  42. i++;
  43. d=prime[i];
  44. }
  45. if(x>1)
  46. {
  47. ++nexp;
  48. ex[nexp]=x;
  49. }
  50. }
  51. inline void R()
  52. {
  53. for(int i=1;i<=20;i++)
  54. biti[i]=0;
  55. }
  56. inline long long SOLVE(long long dw)
  57. {
  58. int c,i;
  59. long long sol=1;
  60. biti[1]=1;
  61. c=nexp+1;
  62. while(!biti[c])
  63. {
  64. int nr1=0;
  65. long long s=1;
  66. for(i=1;i<=nexp;i++)
  67. {
  68. nr1+=biti[i];
  69. if(biti[i])
  70. s=1LL*s*ex[i];
  71. }
  72. if(nr1%2)
  73. sol+=(dw/s);
  74. else sol-=(dw/s);
  75. for(i=1;biti[i];i++)
  76. biti[i]=0;
  77. biti[i]=1;
  78. }
  79. return sol;
  80. }
  81. int main()
  82. {
  83. CIUR();
  84. fin>>query;
  85. while(query--)
  86. {
  87. long long q1,q2,s;
  88. fin>>q1>>q2;
  89. D(q2);
  90. s=SOLVE(q1);
  91. fout<<q1-s+1<<"\n";
  92. R();
  93. }
  94. fin.close();
  95. fout.close();
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment