求最大公约数的快速算法

时间:2021-08-23 13:54:15
求最大公约数的快速算法 
求最大公约数的快速算法求最大公约数的快速算法
/**/ /*
求最大公约数的快速算法 stein 算法求最大公约数,和欧基里德算法相比,效果更好:
求最大公约数的快速算法 主要思想如下: 化归思想
求最大公约数的快速算法 
求最大公约数的快速算法  
求最大公约数的快速算法 1.m为奇数时:
求最大公约数的快速算法    (1)n也为奇数:gcd(m,n) = gcd((m+n)/2,(m-n)/2) ;
求最大公约数的快速算法    (2)n为偶数:  gcd(m,n) = gcd(m,n/2) ;
求最大公约数的快速算法  
求最大公约数的快速算法 2.m为偶数时:
求最大公约数的快速算法   (1) n也为偶数:gcd(m,n) = gcd(m/2,n/2);
求最大公约数的快速算法   (2) n为奇数:  gcd(m,n) = gcd(m/2,n);
求最大公约数的快速算法
求最大公约数的快速算法 3.m == n 时,gcd(m,n) = m 退出
求最大公约数的快速算法  
求最大公约数的快速算法
*/

求最大公约数的快速算法 
求最大公约数的快速算法#include 
< stdio.h >
求最大公约数的快速算法
求最大公约数的快速算法
int  stein_gcd (  int  m ,  int  n )
求最大公约数的快速算法求最大公约数的快速算法
... {
求最大公约数的快速算法    
int temp,total=0 ;
求最大公约数的快速算法    
if ( m < n )
求最大公约数的快速算法求最大公约数的快速算法    
...{
求最大公约数的快速算法         temp 
= m ;
求最大公约数的快速算法         m 
= n ;
求最大公约数的快速算法         n 
= temp ;
求最大公约数的快速算法    }

求最大公约数的快速算法    
求最大公约数的快速算法    
if ( n == 0 )
求最大公约数的快速算法    
return 0 ;
求最大公约数的快速算法    
求最大公约数的快速算法    
while ( m != n )
求最大公约数的快速算法求最大公约数的快速算法    
...{
求最大公约数的快速算法求最大公约数的快速算法          
if ( m & 1/**//* 如果m 为奇数, 因为奇数的后面总有一个1,所以可以通过与1且一下来判断是否是偶数*/
求最大公约数的快速算法求最大公约数的快速算法          
...{
求最大公约数的快速算法求最大公约数的快速算法               
if ( n & 1/**//* m,n都为奇数*/
求最大公约数的快速算法求最大公约数的快速算法               
...{
求最大公约数的快速算法                    temp 
= m ;
求最大公约数的快速算法                    m 
= (m+n)>>1 ;
求最大公约数的快速算法                    n 
= (temp-n)>>1;
求最大公约数的快速算法               }

求最大公约数的快速算法               
else
求最大公约数的快速算法求最大公约数的快速算法               
...{
求最大公约数的快速算法                    n  
>>= 1 ;
求最大公约数的快速算法               }

求最大公约数的快速算法          }

求最大公约数的快速算法求最大公约数的快速算法          
else /**//* m为偶数 */
求最大公约数的快速算法求最大公约数的快速算法          
...{
求最大公约数的快速算法求最大公约数的快速算法               
if ( n & 1/**//*n 为奇数*/
求最大公约数的快速算法求最大公约数的快速算法               
...{
求最大公约数的快速算法求最大公约数的快速算法                    m 
>>= 1 ; /**//*由于在这个过程中,m可能小于n ,所以要判断一下*/
求最大公约数的快速算法                    
if ( m < n )
求最大公约数的快速算法求最大公约数的快速算法                    
...{
求最大公约数的快速算法                         temp 
= m ;
求最大公约数的快速算法                         m 
= n ;
求最大公约数的快速算法                         n 
= temp ;
求最大公约数的快速算法                    }

求最大公约数的快速算法               }

求最大公约数的快速算法               
else
求最大公约数的快速算法求最大公约数的快速算法               
...{
求最大公约数的快速算法                    m 
>>= 1 ;
求最大公约数的快速算法                    n 
>>= 1 ;
求最大公约数的快速算法求最大公约数的快速算法                    total 
++ ; /**//*记录缩小的倍数*/
求最大公约数的快速算法               }

求最大公约数的快速算法          }

求最大公约数的快速算法    }

求最大公约数的快速算法    
求最大公约数的快速算法求最大公约数的快速算法    m 
<<= total ; /**//*还原大小*/
求最大公约数的快速算法    
求最大公约数的快速算法    
return m ;
求最大公约数的快速算法}

求最大公约数的快速算法
求最大公约数的快速算法               
求最大公约数的快速算法               
求最大公约数的快速算法               
求最大公约数的快速算法    
求最大公约数的快速算法    
求最大公约数的快速算法
int  main( void )
求最大公约数的快速算法求最大公约数的快速算法
... {
求最大公约数的快速算法    
int m,n,max=0;
求最大公约数的快速算法    
求最大公约数的快速算法    scanf(
"%d %d",&m,&n);
求最大公约数的快速算法    
求最大公约数的快速算法    max 
= stein_gcd(m,n);
求最大公约数的快速算法    
求最大公约数的快速算法    printf(
"max= %d ",max);
求最大公约数的快速算法    
求最大公约数的快速算法    
求最大公约数的快速算法求最大公约数的快速算法    
/**//*
求最大公约数的快速算法    test
求最大公约数的快速算法    
求最大公约数的快速算法    while( (scanf("%d",&m)) && m != 0 )
求最大公约数的快速算法    {
求最大公约数的快速算法           if ( m & 1)
求最大公约数的快速算法           printf("%d是奇数 ",m);
求最大公约数的快速算法           else
求最大公约数的快速算法           printf("%d是偶数 ",m);
求最大公约数的快速算法    }
求最大公约数的快速算法    
*/
       
求最大公约数的快速算法    system(
"pause");
求最大公约数的快速算法    
return 0 ;
求最大公约数的快速算法}

求最大公约数的快速算法