首页 > 其他 > 详细

P1072 Hankson 的趣味题

时间:2018-10-30 15:24:49      阅读:128      评论:0      收藏:0      [点我收藏+]

P1072 Hankson 的趣味题

解法1:唯一分解定理

通过$gcd$和$lcm$对$x$的质因数个数的限制,算出每个质因数的能取的$min~max$个数

然后用乘法原理乘起来。

解法2(code↓):

考虑$lcm(x,b_{0})=b_{1}$

转化一下:$x*b_{0}=b_{1}*gcd(x,b_{0})$

$x=b_{1}/b_{0}*gcd(x,b_{0})$

枚举一下$b_{0}$的因数,筛一筛就完事了

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cctype>
 6 #define re register
 7 using namespace std;
 8 void read(int &x){
 9     char c=getchar();x=0;
10     while(!isdigit(c)) c=getchar();
11     while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
12 }
13 int gcd(int a,int b){return b?gcd(b,a%b):a;}
14 int n,a0,a1,b0,b1,ans;
15 int main(){
16     read(n);
17     for(re int i=1;i<=n;++i){
18         read(a0);read(a1);read(b0);read(b1);
19         int m=sqrt(b0+0.5); ans=0;
20         for(re int j=1;j<=m;++j){//直接枚举约数
21             if(b0%j) continue;
22             int x=b1/b0*j;
23             ans+=(gcd(x,b0)==j&&gcd(x,a0)==a1);
24             if(j*j!=b0)
25                 x=b1/j,ans+=(gcd(x,b0)==b0/j&&gcd(x,a0)==a1);
26         }printf("%d\n",ans);
27     }return 0;
28 }
解法2

 

P1072 Hankson 的趣味题

原文:https://www.cnblogs.com/kafuuchino/p/9876772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!