zoukankan      html  css  js  c++  java
  • 最大公约数和最小公倍数问题

    总时间限制: 
    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<bits/stdc++.h>
     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<<ANS;
    32     return 0;
    33 }
     
  • 相关阅读:
    C++函数模板的显示调用与隐式调用
    git显示颜色配置
    STL容器元素应满足的条件
    vector缩减容量
    PAT (Basic Level) Practise:1036. 跟奥巴马一起编程
    Core Java Volume I — 4.10. Class Design Hints
    Core Java Volume I — 4.7. Packages
    蓝牙(Profile)构成
    Android开发之Java必备基础
    主机控制器接口(HCI)
  • 原文地址:https://www.cnblogs.com/CXCXCXC/p/4906624.html
Copyright © 2011-2022 走看看