最大公约数和最小公倍数的问题

来源:互联网 发布:陌陌站街用什么软件 编辑:程序博客网 时间:2024/06/06 05:36

题目链接:http://codevs.cn/problem/1012/

题目描述:

题目描述 Description

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

条件:  1.P,Q是正整数

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

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

输入描述 Input Description

二个正整数x0,y0

输出描述 Output Description

满足条件的所有可能的两个正整数的个数

样例输入 Sample Input

3 60

样例输出 Sample Output

4

题目分析:

用辗转相除法来求得最大公约数,然后再用两者之积除以最大公约数得到最小公倍数

就这一题来说,要注意(3,4)和(4,3)这样的算两组哦!


AC代码:

#include<iostream>#include<cstring>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;int GCD(int x,int y){    int a=x,b=y;    if(a<b)    {       int t=a;       a=b;       b=t;    }    int c;    while(b)    {        c=a%b;        a=b;        b=c;    }    return a;}int num,p,q;int main(){   scanf("%d%d",&p,&q);   for(int i=p;i<=q;i++)   {       for(int j=i;j<=q;j++)       {           if(GCD(i,j)==p)           {               if(i*j/p==q)                   num+=2;           }       }   }   cout<<num<<endl;}


0 0
原创粉丝点击