最小公倍数与最大公约数问题(NOIP竞赛原题)

来源:互联网 发布:爱淘宝应用访问的api 编辑:程序博客网 时间:2024/05/17 09:07
 最小公倍数与最大公约数问题:
                            
 描述 Description   
     输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
  条件:1.P、Q是正整数
      2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
  试求,满足条件的所有可能的两个正整数的个数。 
/*

 最小公倍数与最大公约数问题:
                            
 描述 Description   
     输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
  条件:1.P、Q是正整数
      2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
  试求,满足条件的所有可能的两个正整数的个数。 
   
   
 输入格式 Input Format  
   两个正整数  
   
   
 输出格式 Output Format  
   满足条件的所有可能的两个正整数的个数 

*/
/*
搜索法:
根据最小公倍数的定义可知:
若:x0 为 x,y 的最大公约数,y0 为x,y 的最小公倍数,
由定义得:
(x/x0)*(y/x0)*x0 = x*y/x0 = y0 ;
即:x0*y0 = x * y ;
设:i=x/x0,j=y/xo, 则: i*j = y0/x0 且: i,j互质,因此:我们只要找到所有
满足条件的:i,j即可
由于具有对称性,因此只要求: 1--sqrt(y0/x0) 范围内的结果,然如乘以2就OK了

*/
/*
NO.1
*/

#include 
<stdio.h>

int gcd (int a,int b)
{
    
if ( b == 0)
    
return a ;
    
else
    
return gcd(b,a%b) ;
}

int is_fu_ze(int a,int b)
{
    
if(gcd(a,b) == 1)
    
return 1 ;
    
else
    
return 0 ;
}

int main(void)
{
    
long x0,y0,i,j,k,total=0;
    
    scanf(
"%ld %ld",&x0,&y0);
    
    
if( y0 % x0 != 0 || x0 == y0)
    {
       ( x0 
== y0) ? printf("1 ") : printf("0 ");
       
return 0 ;
    }
    
    k 
= y0 / x0 ;
    j 
= (int)sqrt((double)k) ;
    
for(i=1 ; i<= j ; i++)
    
if( k % i == 0 && is_fu_ze(i,k/i) )
    {
        total 
++ ;
        printf(
"%ld %ld ",i,k/i);
    }
    
    
    printf(
"total = %ld ",total*2) ;
    
    system(
"pause");
    
return 0 ;
}
/*
NO.2  
*/ 
/*找规律法:
n = 2^k ; 其中K是YO/X0的质因子个数
*/
       #include 
<stdio.h>
       
       
int main(void)
       {
           
long x0,y0 ;
           
long   k,total=0;
           
int i,j,num=0 ;
           
           scanf(
"%d %d",&x0,&y0);
           
           
if ( y0 % x0 != 0 || y0 == x0)
           {
                
               ( x0 
== y0) ? printf("1 ") : printf("0 ");
                
return 0 ;
           }
           
           k 
= y0/x0 ;
           
           j 
= 2
           
           
while (1)
           {
                 
if(k % j == 0)
                 {
                      
                     
while(k % j == 0 && k != j)
                     k 
/= j ;
                     num 
++ ;
                     
if(k == j)
                     
break ;
                 }
                 
                 j 
++ ;
           }
           
           total 
= 1 ;
           
for(i=1 ; i<= num ; i++)
           total 
*= 2 ;
           printf(
"%ld",total);
            
           
return 0 ;
       }
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安装目录不可写怎么办 手机不支持exfat格式怎么办 windows7图标变大了怎么办 igs格式烂曲面怎么办 手机桌面文件夹打不开怎么办 苹果下载不了150怎么办 iphone6速度变慢怎么办 苹果手机微信打不开pdf怎么办 苹果手机打不开pdf怎么办 pdf文件超过了怎么办 pdf电脑删不了怎么办 联想笔记本摄像头横屏调竖屏怎么办 pdf文件打开失败怎么办 pdf复制文字乱码怎么办 电子发票乱码了怎么办 超星尔雅挂了怎么办 电脑应用双击打不开怎么办 电脑控制面板打不开怎么办 转换器无法打开文件怎么办 电脑文件无法打开怎么办 手机上jpg打不开怎么办 脸上全是黄褐斑怎么办 容易发胖的体质怎么办 感冒后一直咳嗽怎么办 感冒咳嗽怎么办小窍门 到了减肥平台期怎么办 减肥遇见平台期怎么办 脚冻伤了痒怎么办 冬天脚后跟冻了怎么办 夏天脚冻了怎么办 导航软件删了怎么办 婆婆爱打孩子怎么办 乙肝婆婆带孩子怎么办 婆婆不会教孩子怎么办 婆婆不会带孩子怎么办 公婆枪带孩子怎么办 婆婆要带孩子怎么办 婆婆太惯孩子怎么办 三个月宝宝溢奶怎么办 孩子半夜咳嗽吐怎么办 中老年人转氨酶和血指高怎么办