| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖
标题:求两个正整数。
取消只看楼主 加入收藏
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
 问题点数:0 回复次数:5 
求两个正整数。

已知两个正整数的和为667,它们的最大公约数与最小公倍数之比为1:120求这两个数。
注:要求不能编写或是调用求两个数的最大公约数或最小公倍数的函数来求解,而且程序的运算速度要尽量快。

搜索更多相关主题的帖子: 整数 最大公约数 最小公倍数 运算速度 函数 
2006-09-27 19:23
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
以下是引用ww84020209在2006-9-27 21:34:42的发言:


#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的,写的不错!呵呵!


♂ 死后定当长眠,生前何须久睡。♀
2006-10-04 17:21
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
呵呵,楼上的程序写的不错我没注意你上面已经写了if(sq*sq==t &amp;&amp; (SUM+sq)%2==0)语句了.挺好,看来你的数学学的很好啊?不错不错!

♂ 死后定当长眠,生前何须久睡。♀
2006-10-20 19:29
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 

呵呵,你到是挺会根据判别试来构造一元二次方程的,看来你初中的数学水平不错啊!嘿嘿!


♂ 死后定当长眠,生前何须久睡。♀
2006-10-21 20:34
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
以下是引用ww84020209在2006-9-27 21:34:42的发言:


#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;
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;
}


你知道你写的这个程序为什么没有输出结果吗?我刚才运行了一下发现你的程序有毛病!


♂ 死后定当长眠,生前何须久睡。♀
2006-10-23 21:19
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
以下是引用ww84020209在2006-9-27 21:43:54的发言:

方法2:

#include<stdio.h>
#include<math.h>
int main()
{
int i;
for(i=1;i<=sqrt(120);i++)
{
if(120%i==0 && 667%(i+120/i)==0)
printf("the two numbers are %d,%d\n",i*667/(i+120/i),120/i*667/(i+120/i));
}
}

这个程序到是写的不错语言很简练的!只是我有些看不懂为什么要这么做?
for(i=1;i<=sqrt(120);i++)
{
if(120%i==0 && 667%(i+120/i)==0)
printf("the two numbers are %d,%d\n",i*667/(i+120/i),120/i*667/(i+120/i));
}
能不能给一些提示?


♂ 死后定当长眠,生前何须久睡。♀
2006-10-26 18:28
快速回复:求两个正整数。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029076 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved