yushui come in!
//
// File: test.cc
// Author: vlinux
// 题目:输入一个数 把它分成两个数 看着两个数的最大公约数和最小公倍数之比为1:7 求着两个数
// Created on 2007年3月12日, 下午9:19
//
#include <stdlib.h>
#include <iostream.h>
//
//
//
//求最大公约数
inline int getGCD( int x, int y ) {
int i, j, t;
if (x == 0 ) return y;
if (y == 0 ) return x;
for (i = 0 ; 0 == (x & 1 );x >>= 1 , ++ i);
for (j = 0 ; 0 == (y & 1 );y >>= 1 , ++ j);
if (j < i) i = j;
for (;;) {
if (x < y) t = y, y = x, x = t;
if ( 0 == (x -= y)) return y << i;
for (; 0 == (x & 1 );x >>= 1 );
}
}
//求最小公倍数
inline int getLCM( int x, int y, int gcd ) {
return x*y/gcd;
}
int main(int argc, char** argv) {
int num;
//cout << "Input a integer\n";
//cin >> num;
for( num = 1; num<=1000; num++ ) {
int i = 1;
do {
if( num%i == 0 ) { //如果i能够被num整除,说明 i * num/i = num
//即:num可以被拆分成 i与num/i相乘
int a = i;
int b = num/i;
int gcd = getGCD( a, b ); //取得最大公约数
int lcm = getLCM( a, b, gcd ); //取得最小公倍数
if( gcd*7==lcm ) {
cout << "num=" << num << " a=" << a << " b=" << b << " gcd=" << gcd << " lcm=" << lcm << endl;
}
}
} while( i++<=num/2+1 );
}
return 0;
}
// File: test.cc
// Author: vlinux
// 题目:输入一个数 把它分成两个数 看着两个数的最大公约数和最小公倍数之比为1:7 求着两个数
// Created on 2007年3月12日, 下午9:19
//
#include <stdlib.h>
#include <iostream.h>
//
//
//
//求最大公约数
inline int getGCD( int x, int y ) {
int i, j, t;
if (x == 0 ) return y;
if (y == 0 ) return x;
for (i = 0 ; 0 == (x & 1 );x >>= 1 , ++ i);
for (j = 0 ; 0 == (y & 1 );y >>= 1 , ++ j);
if (j < i) i = j;
for (;;) {
if (x < y) t = y, y = x, x = t;
if ( 0 == (x -= y)) return y << i;
for (; 0 == (x & 1 );x >>= 1 );
}
}
//求最小公倍数
inline int getLCM( int x, int y, int gcd ) {
return x*y/gcd;
}
int main(int argc, char** argv) {
int num;
//cout << "Input a integer\n";
//cin >> num;
for( num = 1; num<=1000; num++ ) {
int i = 1;
do {
if( num%i == 0 ) { //如果i能够被num整除,说明 i * num/i = num
//即:num可以被拆分成 i与num/i相乘
int a = i;
int b = num/i;
int gcd = getGCD( a, b ); //取得最大公约数
int lcm = getLCM( a, b, gcd ); //取得最小公倍数
if( gcd*7==lcm ) {
cout << "num=" << num << " a=" << a << " b=" << b << " gcd=" << gcd << " lcm=" << lcm << endl;
}
}
} while( i++<=num/2+1 );
}
return 0;
}