编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
 
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
发新话题
打印

请问最大公约数怎么求啊?

请问最大公约数怎么求啊?

请问最大公约数怎么求啊?两个数 的

TOP

Option Explicit

Private Sub Command1_Click() Dim A As Integer, B As Integer, C As Integer Dim i As Integer

A = Val(Text1.Text) B = Val(Text2.Text) If A < B Then C = A A = B B = C Else C = B End If Do While C >= 1 If A Mod C = 0 And B Mod C = 0 Then Label1.Caption = C Exit Do Else C = C - 1 End If Loop

End Sub

四月天原创文学网 http://yc.4yt.net

TOP

数学里列式求法

Option Explicit

Private Sub Command1_Click() Dim A As Integer, B As Integer, C As Integer Dim i As Integer

A = Val(Text1.Text) B = Val(Text2.Text) i = 2 C = 1 Do While A >= i And B >= i If A Mod i = 0 And B Mod i = 0 Then C = C * i A = A / i B = B / i i = 2 Else i = i + 1 End If Loop Label1.Caption = C

End Sub

四月天原创文学网 http://yc.4yt.net

TOP

有收获

TOP

收获 什么了?
四月天原创文学网 http://yc.4yt.net

TOP

不用这样写~~~~

用欧,欧几里德算法,非常简单~~

#include <iostream> using namespace std; int main() { int r = -1,m = 119,n = 544; if (m < n) { int temp = m; m = n,n = temp; } while (r != 0) { r = m % n; if (r == 0) break; else m = n,n = r; } cout << n << endl;

return 0; }

[此贴子已经被作者于2004-05-05 11:14:56编辑过]

I am a big fan of c plus plus.

TOP

请指教!
四月天原创文学网 http://yc.4yt.net

TOP

引用:
C++大粉丝 在 2004-4-28 17:44 的发言:

不用这样写~~~~
用欧,欧几里德算法,非常简单~~
#include <iostream>
using namespace std;
int main()
{
int r = -1,m = 119,n = 544;
if (m < n)
{
  int temp = m;
  m = n,n = temp;
}
while  ...
额。。。这是C++的语言??

TOP

function ExtendedGCD(A, B: TData; var X, Y: TData): TData; //A*X+B*Y=GCD(A,B)
begin
    if B = 0 then
    begin
        Result := A;
        X := 1;
        Y := 0;
    end
    else
    begin
        Result := ExtendedGCD(B, A mod B, Y, X);
        Dec(Y, A div B * X);
    end;
end;

    求最大公约数
递归(recursion):
function gcd(a,b:longint):longint;
begin
   if b=0 then exit(a);
   exit(gcd(b,a mod b));
end;
非递归(iterative):
function gcd(a,b:longint):longint;
  var t:longint;
  begin
   while b<>0 do
    begin
     t:=a;a:=b;b:=t mod b;
    end;
  exit(a);
end;
或者使用扩展欧几里德算法(辗转相除法):
function extendedEuclid(a,b:longint;
var x,y:longint):longint;
var p,q:longint;
begin
  if b=0 then
   begin  x:=1;y:=0;exit(a);end;
  p:= extendedEuclid (b, a mod b,x,y);
  q:=x;x:=y;y:=q-a div b *y;
  exit(p);
end;
    求最小公倍数
k:=a*b div gcd(a,b);
个人Blog http://www.multiple1902.cn
个人网站 http://www.tcdongli.com
天才动力程序设计视频 http://www.tcdonglirecords.cn [under construction]

TOP

发新话题