记录编号 127476 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]Hankson的趣味题 最终得分 100
用户昵称 GravatarCirno 是否通过 通过
代码语言 C++ 运行时间 0.107 s
提交时间 2014-10-15 19:01:13 内存使用 0.51 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5. #define SIZE 50000
  6. #define ll long long
  7. int p[SIZE];
  8. ll a0,b0,a1,b1;
  9. ll sum=1;
  10. ll aa0,aa1,bb0,bb1;
  11. ll low,high;
  12. void getprime()
  13. {
  14. bool prime[SIZE]={0};
  15. int k=0;
  16. int temp=(int)sqrt((double)SIZE);
  17. for(int i=2;i<SIZE;i++)
  18. {
  19. if(!prime[i])
  20. {
  21. p[k]=i,k++;
  22. if(i<=temp)
  23. {for(int j=i*i;j<=SIZE;j+=i)
  24. prime[j]=1;}
  25. }
  26. }
  27. }
  28. ll resolve(ll &x,ll p)
  29. {
  30. ll sum=0;
  31. while(x%p==0)
  32. {
  33. x/=p,sum++;
  34. }
  35. return sum;
  36. }
  37. void deal(ll pi)
  38. {
  39. aa0=resolve(a0,pi),aa1=resolve(a1,pi),bb0=resolve(b0,pi),bb1=resolve(b1,pi);//素数的幂
  40. low=aa1,high=bb1;//π(bi-ai)
  41. if(aa0>aa1)//if(γi>βi)
  42. high=aa1;//(bi-ai)=1
  43. if(bb0<bb1)//if(γi<βi)
  44. low=bb1;//(bi-ai)=1
  45. {if(high>=low)
  46. sum*=(high-low+1);
  47. else
  48. sum=0;return;
  49. }
  50. }
  51. void init()
  52. {
  53. freopen("son.in","r",stdin);
  54. freopen("son.out","w",stdout);
  55. int n;
  56. scanf("%d",&n);
  57. for(int k=0;k<n;k++)
  58. {
  59. scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
  60. sum=1;
  61. for(int i=0;p[i]*p[i]<=b1&&p[i]!=0;i++)
  62. {
  63. deal(p[i]);
  64. }
  65. if(b1>1)
  66. deal(b1);
  67. printf("%d\n",sum);
  68. }
  69. }
  70. int main()
  71. {
  72. getprime();
  73. init();
  74. return 0;
  75. }