Hankson 的趣味题

【TIMEGate】

https://www.luogu.org/problem/P1072

【解题思路】

一道TG T2不知为何这么水

按照题目的核心意思枚举gcd和lcm

略微优化一下做一个小处理

就是在循环判断i的时候,只需要循环到sqrt(b1)就可以了,每次判断i和b1/i

【code】

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 int n,ans;
 7 int a0,a1,b0,b1;
 8 inline int read(){
 9     char ch=getchar();
10     int x=0,f=1;
11     while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
12     while(ch>='0'&&ch<='9'){
13         x=(x<<1)+(x<<3)+ch-'0';
14         ch=getchar();
15     }
16     return x*f;
17 }
18 inline int gcd(int a,int b){
19     if(b==0)return a;
20     return gcd(b,a%b);
21 }
22 inline int lcm(int a,int b){
23     return (long long)a*b/gcd(a,b);
24 }
25 int main(){
26     scanf("%d",&n);
27     while(n--){
28         ans=0;
29         scanf("%d %d %d %d",&a0,&a1,&b0,&b1);
30         for(register int i=1;i<=sqrt(b1);i++){
31             if(b1%i==0){
32                 if(gcd(i,a0)==a1 && lcm(i,b0)==b1)
33                     ans++;
34                 if(b1!=i*i)
35                     if(gcd(b1/i,a0)==a1 && lcm(b1/i,b0)==b1)//优化
36                         ans++;
37             }
38         }
39         printf("%d\n",ans);
40     }
41     return 0;
42 }

 

posted @ 2019-09-07 15:12  GTR_PaulFrank  阅读(110)  评论(0编辑  收藏  举报