这题真TM的趣味

可以说我的动手能力还是不行,想到了算法却写不出来。以后说自己数论会GCD的时候只好虚了……

我们首先这么想。

x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x和a0不会再有除了1之外的公约数。

证明:设x/a1=c,a0/a1=d.

若有gcd(c,d)=y 则有p=c/y,q=d/y.

反之c=py,d=qy.

则有x=pya1,a0=qya1。

则x和a0共有公约数ya1。

y属于正实数集,因此ya1>a1.

因此gcd(x,a0)=ya1。

又因为gcd(x,a0)=a1,所以假设与推出结果相矛盾,因此得出那行带颜色的结论。

同样可以得出结论:b1=b0,b1/x两数也不应该有除了1之外的公约数。

证明方式参考上面。

代码如下

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long gcd(long long a,long long b){
if(b==) return a;
return gcd(b,a%b);
} int main(){
int T=read();
while(T--){
int ans=;
int a=read(),b=read(),c=read(),d=read();
for(int i=;i*i<=d;++i){
if(!(d%i)){
if(!(i%b)&&gcd(a/b,i/b)==&&gcd(d/c,d/i)==) ans++;
int j=d/i;
if(i==j) continue;
if(!(j%b)&&gcd(a/b,j/b)==&&gcd(d/c,d/j)==) ans++;
}
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. MD5 加密
  2. 玩转AR,联想将在2017年推出第二款Tango AR手机
  3. iOS 通过二进制判断图片类型
  4. Web.config之连接字介绍
  5. HDOJ/HDU 1200 To and Fro(加密解密字符串)
  6. PHP学习笔记1.2——预定义变量参考
  7. CodeForces 707B Bakery
  8. 让你瞬间萌比的35个python小技巧
  9. Linux CentOS完全卸载PHP
  10. UE4/Unity3D中同时捕获多高清摄像头的高效插件
  11. 关于在linux下安装git,以及在idea上将项目部署到码云上
  12. selenium如何操作HTML5的画布canvas上的元素
  13. 【Java基础】char
  14. 什么是crf
  15. Python gensim库word2vec 基本用法
  16. _instance_reset
  17. [转载]必须Mark!最佳HTML5应用开发工具推荐
  18. Struts2中获取Web元素request、session、application对象的四种方式
  19. maven+springmvc+spring+mybatis
  20. 阻塞队列之一:BlockingQueue汇总

热门文章

  1. arcgis jsapi接口入门系列(6):样式
  2. IOS命名
  3. SSave ALAsset image to disk fast on iOS
  4. WINDOWS-API:取得当前用户账户名-GetUserName
  5. Java产生GUID
  6. Bootstrap 原始按钮
  7. NoSQL 之 Morphia 操作 MongoDB
  8. CS193p Lecture 9 - Animation, Autolayout
  9. C++系统学习一:基本数据类型和变量
  10. MySQL中数组的存储