已知两个正整数的和为667,它们的最大公约数与最小公倍数之比为1:120求这两个数。
注:要求不能编写或是调用求两个数的最大公约数或最小公倍数的函数来求解,而且程序的运算速度要尽量快。
#include<stdio.h>
#include<math.h>
#define SUM 667
int main()
{
int t,n=1,sq,x1,x2;
while((t=SUM*SUM-4*120*n*n)>=0)
{
sq=(int) sqrt(t);
if(sq*sq==t && (SUM+sq)%2==0)
{
x1=(SUM+sq)/2;/*写的不好!如果SUM+sq是个奇数哪就不正确了,但是实际上SUM+sq是个偶数,何不改为 x1=SUM+sq; x2=SUM-sq; if(x1>0 && x2>0 && x1%(2*n)==0 && x2%(2*n)==0)
printf("the two numbers are %d,%d\n",x1/2,x2/2);*/
x2=(SUM-sq)/2;
if(x1>0 && x2>0 && x1%n==0 && x2%n==0)
printf("the two numbers are %d,%d\n",x1,x2);
}
n++;
}
return 0;
}
总之这个程序是用方程的观点计算出x1与x2的,写的不错!呵呵!