回 帖 发 新 帖 刷新版面

主题:[原创]二进制数`-求公约数-?++++

怎样在二进制下求最小公约数?

回复列表 (共12个回复)

沙发

最小公约数?!最大把?
我没有好办法,先换算成十进制怎么样?

板凳


 不好意思打错了```
     是的是最大公约数;
   但是数据大小是10^20000;
  用的是二进制表示的``
  谢谢!!~~

3 楼

哎呀 !先把2进制转化成10进制再求就OK了嘛?如果你一定要在2进制上求!我没有什么方法.你自己想吧,我觉得不会很简单

4 楼



[img]http://ngjc.net/upload/forum/200604/20060408001649ss.gif[/img]

5 楼

!!!

6 楼

同意一楼的观点,换成十进制后做吧,若是二进制那要看看有什么规律没?可不可以走捷径???
[em2]

7 楼

谢谢大家支持哈```
   但是请大家看下数据范围```

8 楼

例如:a=10010110
b=1001

算法如下:

Step1: 判断a与b大小, 把小的那个数末尾补足0, 使其与较大数的位数相同, 得到c. <a=10010110, b=1001, c=10010000>

Step2: 再判断 <a与b中较大的那个数> 与c大小, 然后大减小得到d.(别告诉我你不会高精度减法...)   <a=10010110 , b=1001, c=10010000, d=110>    ,若d=0, 则最大公约数=<a与b中较小的那个数>, end.

Step3: <a与b中较大的那个数>:=d.     <a=110, b=1001>

Step4: 转到Step1.

啊,还有一点,string最长只能有255字节,你可以用ansistring, 那个可以长到2147483647字节,当然,前提是你用FreePascal, 而不是TurboPascal.

不好意思, 本人懒得写程序, 只写了个算法, 凑合着看吧XD

如果AC了, 别忘了给我30分~~

9 楼

只是因大家的关心 所以 加分```
   更是由于大家的爱心```

10 楼

补充:
   我用的是LAZARUS

我来回复

您尚未登录,请登录后再回复。点此登录或注册