上善若水

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  2 Posts :: 32 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 10189
  • 排名 - 1164

最新评论

阅读排行榜

评论排行榜

GCD和LCM

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:33            测试通过:10

描述

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

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

2.要求P,Qx0为最大公约数,y0为最小公倍数.

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

 

输入

两个数 x0 y0

 

输出

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

样例输入

3 60

样例输出

4

提示

此时的  P  Q  分别为

3   60

15      12

12      15

60       3

所以:满足条件的所有可能的两个正整数的个数共4.

 

题目来源

NOIP2001

分析:因为x0*y0==a*b;所以找到他们之间的一个关系,然后只要从小的开始就可以了,判断b是否能被x0整除,但差点忽略的问题是有可能x0不是最小。如6、30所以要判断下,采用欧几里德辗转相除。AC了
#include <stdio.h>
#include 
<math.h>
int gcd(int a,int b)
{
    
int c;
    
if (a<b)
    
{
        c
=a;
        a
=b;
        b
=c;
    }

    
while (a%b)
    
{
        c
=a%b;
        a
=b;
        b
=c;
    }

    
return b;
}

int main()
{
    
int x0,y0,i,j,k,n=0;
    scanf(
"%d%d",&x0,&y0);
    
for (i=x0;i<=y0;i+=x0)
    
{
        
if (x0*y0/i%x0==0)
        
{    
            
//判断最小公倍数
            if (x0*y0%i==0)
            
{
                
if(gcd(i,x0*y0/i)==x0)
                n
++;
            }

        }

    }

    printf(
"%d\n",n);
}
注:代码注释中应为//判断最大公约数。
posted on 2009-11-26 22:54 上善若水 阅读(461) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理