找回密码
 欢迎注册
楼主: gxqcn

[讨论] 快速计算一个10进制整数最多可被2的多少次方整除?

[复制链接]
发表于 2009-3-4 18:01:53 | 显示全部楼层
我觉得直接10进制转2进制已经不错了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-4 18:04:55 | 显示全部楼层
那这个帖子也可以结束了 呵呵 我想,算法就是先得到10进制末尾的0 10移位去掉0 再根据进制测试末位的2的幂次 如果达到最大,再考虑2移位测试 没有则直接结束
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-4 20:40:42 | 显示全部楼层
谢谢大家。 其实我当前能想到的算法也是大家所说的, 把这个问题抛出来,只是想看看是否还存在特别精妙的算法。 把一个大整数转化成二进制形式是很快的, 也就是说当前的算法 getMax2Exp 是可行的, 但若求 getMax5Exp 呢? 即:如何快速计算一个大整数最多可被5的多少次方整除?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-5 08:32:33 | 显示全部楼层
也是我说的思路吧 先根据末尾确定一个幂 再根据最后若干位确定小幂次 一旦达到最大幂次 比如8或者9 再测试高位 无非是用5除
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-5 23:40:20 | 显示全部楼层
原帖由 无心人 于 2009-3-4 17:53 发表 楼上的想法完全不可行啊
是吗?那就PASS掉好了!我也只是瞎猜一下!呵呵!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-6 07:50:26 | 显示全部楼层
litaoye 的二分法思想也是可以考虑的。 但最好修正成 2^9、2^18、2^36、。。。这样的序列。 算法可以这样设计: 1、s = 数组A前端元素连续为0的个数;k = 1; 2、r = a、a[s+1]、。。。、a[s+k-1] 构成的大数最多可被2整除的次数 3、若 r >= 9*k 且 s+k
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-6 09:20:36 | 显示全部楼层
我觉得二分法也是可以的,因为问题本质上是一个在有序数列中查找某个数的问题,无疑二分法是最快的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-6 11:17:17 | 显示全部楼层
写出代码比较下 我想99%可能是在最末字即结束 所以看具体输入的数值的分布
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-6 12:24:04 | 显示全部楼层
如果是在上述假设前提下, 16# 的算法就更具优势。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-6 15:38:08 | 显示全部楼层

回复 16# gxqcn 的帖子

如果也可以考虑的话,就给了我很大的鼓舞呀!呵呵!再想想! 说个思路,不一定实用!可以先算一下Mod 9,这个好算,数位加和就行了! 这样可以相对在查找2^N的时候可以更明确1些,2^m % 9 是个循环!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 00:30 , Processed in 0.026692 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表