博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大公约数和最小公倍数问题
阅读量:5167 次
发布时间:2019-06-13

本文共 1118 字,大约阅读时间需要 3 分钟。

总时间限制: 
1000ms
内存限制: 
65536kB
描述

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的p,q的个数:

条件:

1.P,q是正整数

2.要求P,q以x0为最大公约数,以y0为最小公倍数。

试求:满足条件的所有可能的两个正整数的个数。

 

输入
一行,包含两个正整数x0和y0,中间用单个空格隔开。
输出
一个整数,即满足条件的个数。
样例输入
3 60
样例输出
4
提示
此时的P q分别为:
3 60
15 12
12 15
60 3
所以:满足条件的所有可能的两个正整数的个数共4种。
来源
NOIP2001复赛 普及组 第二题
   若num1,与num2的最大公约数为gcd(num1,num2),最小公倍数lcm(num1,num2);则有lcm(num1,num2)*gcd(num1,num2)==num1*mum2。
因为lcm(a,b)==(a*b)/gcd(a,b),所以:
1 #include
2 using namespace std; 3 inline int exgcd(int a,int b,int &x,int &y){ 4 if(b==0){ 5 x=1,y=0; 6 return a; 7 } 8 else{ 9 int ans=exgcd(b,a%b,y,x);10 y-=x*(a/b);11 return ans;12 }13 }14 15 int N,M,x,y;16 int cheng;17 int maxx;18 int ANS;19 int main(){20 scanf("%d%d",&N,&M);21 cheng=N*M;22 maxx=int(sqrt(double(cheng)));23 for(int i=1;i<=maxx;i++){24 if(cheng%i==0){25 int tmp1=i; int tmp2=cheng/i;26 if(exgcd(tmp1,tmp2,x,y)==N){27 ANS+=2;28 }29 }30 }31 cout<

 

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4906624.html

你可能感兴趣的文章
Android简单逐帧动画Frame的实现(二)
查看>>
四人团-江南行-在乌镇西栅旅游
查看>>
跨域cookie使用
查看>>
安装 Git 并连接 Github
查看>>
Java Client/Server 基础知识
查看>>
泛函分析历史
查看>>
遇见喜欢数学的女孩
查看>>
2017-2018-1 实变函数
查看>>
HDOJ-2153
查看>>
Redis初识
查看>>
QT加载qss
查看>>
委托链
查看>>
c# 后台异步请求接口
查看>>
AI自主决策——有限状态机
查看>>
C#使用Command将dataGrideView表格内数据与数据库交互
查看>>
设计模式 - 单列模式
查看>>
php编程中容易忽略的地方
查看>>
主机字节序的大端和小端
查看>>
Kattis - Different Distances
查看>>
hashmap冲突的解决方法以及原理分析:
查看>>