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

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

    条件:
      1.P,Q 是正整数
      2.要求P,Q以x为最大公约数,以y为最小公倍数
    试求:满足条件的所有可能的2个正整数的个数

    这道题我第一眼看就想到用两个循环暴力枚举P,Q,再用辗转相除法求出为最大公约数,再通过最大公约数求出最小公倍数,看是否与x,y相等

     1 #include<iostream>
     2 using namespace std;
     3 int gcd(int a,int b)//最大公约数递归函数 
     4 {
     5   if(b==0)return a;
     6   return gcd(b,a%b);
     7 }
     8 int main()
     9 {
    10   int x,y,ans=0;
    11   cin>>x>>y;
    12   for(int i=x;i<=y;i++)//暴力枚举P,Q 
    13     for(int j=x;j<=y;j++)
    14       if(gcd(i,j)==x && i*j/gcd(i,j)==y)//求最大公约数,推出最小公倍数 
    15         ans++; 
    16   cout<<ans;
    17 }

     但是只能得七八十分,会超时两三个

    后来我想到两个数的积等于最大公约数和最小公倍数的积

    于是又写了一个

     1 #include<iostream>
     2 using namespace std;
     3 int gcd(int a,int b)//最大公约数递归函数 
     4 {
     5   if(b==0)return a;
     6   return gcd(b,a%b);
     7 }
     8 int main()
     9 {
    10   int x,y,ans=0;
    11   cin>>x>>y;
    12   for(int i=x;i<=y;i++)//枚举P
    13     if(x*y%i==0 && gcd(i,x*y/i)==x)//Q==x*y/i,判断Q是否存在和最大公约数
    14       ans++
    15   cout<<ans;
    16 }

    这个程序写到一半我才发现并不是i*j=x*y的i,j都以x为最大公约数,y为最小公倍数

    例如4*45=3*60  5*36=3*60

      5*16=4*20  10*8=4*20

    所以还是要判断一次最大公约数

  • 相关阅读:
    正则表达式之断言
    认识CSS中标题引入icon图标
    认识CSS中字体图标
    认识CSS中精灵技术(sprite)和滑动门
    认识CSS中高级技巧之用户界面样式
    认识CSS中高级技巧之元素的显示与隐藏
    认识CSS中布局之文档流、浮动、定位以及叠放次序
    正则表达式之括号
    正则表达式之量词
    正则表达式之字符组
  • 原文地址:https://www.cnblogs.com/StoneXie/p/9398065.html
Copyright © 2011-2022 走看看