记录编号 556221 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]Hankson的趣味题 最终得分 100
用户昵称 Gravatar锝镆氪锂铽 是否通过 通过
代码语言 C++ 运行时间 1.479 s
提交时间 2020-10-18 11:26:48 内存使用 8.54 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <cmath>
  5. #define LL long long
  6. using namespace std;
  7. const int maxN = 4e5 + 10;
  8.  
  9. void factor(LL n);
  10. void primes(int n);
  11. LL lcm(LL a, LL b);
  12. LL gcd(LL a, LL b);
  13.  
  14. int n, m;
  15. LL fac[maxN];
  16. bool v[maxN];
  17. int main(void){
  18. freopen("son.in","r",stdin);
  19. freopen("son.out","w",stdout);
  20. scanf("%d", &n);
  21. for (int i = 1; i <= n; i ++){
  22. LL a0, a1, b0, b1;
  23. int ans = 0;
  24. scanf("%lld%lld%lld%lld", &a0, &a1, &b0, &b1);
  25. factor(b1);
  26. for (int i = 1; i <= m; i ++){
  27. if (gcd(a0, fac[i]) == a1 && lcm(fac[i], b0) == b1)
  28. ans ++;
  29. }
  30. printf("%d\n", ans);
  31. }
  32. return 0;
  33. }
  34.  
  35. LL gcd(LL a, LL b){
  36. return b ? gcd(b, a % b) : a;
  37. }
  38.  
  39. LL lcm(LL a, LL b){
  40. return (a * b) / gcd(a, b);
  41. }
  42.  
  43. void factor(LL n){
  44. m = 0;
  45. for (int i = 1; i * i <= n; i ++){
  46. if (n % i == 0){
  47. fac[++ m] = i;
  48. if (i != n / i)
  49. fac[++ m] = n / i;
  50. }
  51. }
  52. }