NC50558. Hankson 的趣味题
描述
输入描述
第一行为一个正整数n,表示有n组输入数据。
接下来的n行每行一组输入数据,为四个正整数,每两个整数之间用一个空格隔开。
输入数据保证能被整除,能被整除。
输出描述
共n行。每组输入数据的输出结果占一行,为一个整数。
对于每组数据:若不存在这样的x,请输出0;若存在这样的x,请输出满足条件的x的个数。
示例1
输入:
2 41 1 96 288 95 1 37 1776
输出:
6 2
说明:
第一组输入数据,$x$可以是$9,18,36,72,144,288$,共有$6$个;C++11(clang++ 3.9) 解法, 执行用时: 252ms, 内存消耗: 404K, 提交时间: 2020-10-19 22:19:04
#include<bits/stdc++.h> #define LL long long using namespace std; int a0,a1,b0,b1; bool check(int x){return __gcd(x,a0)==a1&&(LL)b0*x/__gcd(b0,x)==b1;} int main(){ int T;scanf("%d",&T); while(T--){ scanf("%d%d%d%d",&a0,&a1,&b0,&b1); int ans=0; for(int i=1;i*i<=b1;i++)if(b1%i==0){ if(check(i))ans++; if(i*i!=b1&&check(b1/i))ans++; } printf("%d\n",ans); } return 0; }