24小时热门版块排行榜    

查看: 2677  |  回复: 30

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流! 2011-06-19 17:18:47
引用回帖:
Originally posted by holmescn at 2011-06-18 10:23:25:
OK, 完成 Python版的质数分解法, 不过不是很快,大概要3秒左右吧
[code]
# coding: utf-8

factorsOfA = []

for a in xrange(2, 101):
    u = 2
    n = 0
    x = a
    factors = []
    while u & ...

你这个效率太低了,乘除次数太多,而且,性能似乎受大数算法拖累。我建议你用Perl评估下大数算法的性能,就我这边看,1000万次的迭代,use bigint和no use bigint差别有几秒之多。

另外,建议你看看这个算法:http://zh.wikipedia.org/wiki/%E5 ... C%E7%AD%9B%E6%B3%95
漩涡的中心有一块空地,空空的。
11楼2011-06-18 15:54:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
微尘、梦想(金币+2): 鼓励交流! 2011-06-19 17:19:09
引用回帖:
Originally posted by huycwork at 2011-06-18 15:54:04:
你这个效率太低了,乘除次数太多,而且,性能似乎受大数算法拖累。我建议你用Perl评估下大数算法的性能,就我这边看,1000万次的迭代,use bigint和no use bigint差别有几秒之多。

另外,建议你看看这个算法 ...

这个大数算法有什么关系呢?'

当然,我可以先筛出小于100的质数. 然后再把2到100这些数做分解. 不过,我觉得这个算法的瓶颈不在这里. 那个分解过程用不了1秒. 主要是下面怎么做指数乘法, 并用什么方法做比较. 这个地方我用了太多的转换, 所以慢了.

[ Last edited by holmescn on 2011-6-18 at 18:07 ]
12楼2011-06-18 17:49:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流! 2011-06-19 17:19:27
引用回帖:
Originally posted by holmescn at 2011-06-18 17:49:22:
这个大数算法有什么关系呢?'

当然,我可以先筛出小于100的质数. 然后再把2到100这些数做分解. 不过,我觉得这个算法的瓶颈不在这里. 那个分解过程用不了1秒. 主要是下面怎么做指数乘法, 并用什么方法做比较 ...

电路板实现的乘除算的是定点数,计算时间接近常数,但目前实现大数算法时多半都用用循环实现的,像加法的大数算法,二进制的补码实现看起来像这样:
CODE:
int add(int bs1, int bs2){
        int t, ac = bs2;
        t = bs1 & ac;
        bs1 ^= ac;
        while(t){
                t <<= 1;
                ac = t;
                t = bs1 & ac;
                bs1 ^= ac;
        }
        return bs1;
}

乘法更复杂,仿照竖式运算复杂度会达到n*n,跟电路板的效率根本没法拼,不能随便祭出大数算法的呃~

[ Last edited by huycwork on 2011-6-18 at 18:18 ]
漩涡的中心有一块空地,空空的。
13楼2011-06-18 18:14:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

刚测了一下, 整个算法平均用时1.5秒, 分解只用了千分之1.5秒. 所以, 不是主要矛盾,不用优化.
14楼2011-06-18 18:15:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

引用回帖:
Originally posted by huycwork at 2011-06-18 18:14:07:
电路板实现的乘除算的是定点数,计算时间接近常数,但目前实现大数算法时多半都用用循环实现的,像加法的大数算法,二进制的补码实现看起来像这样:
[code]
int add(int bs1, int bs2){
        int t, ac = bs ...

python那个大数算法版很快的啊, 比我后来这个算法快很多的. 应该是使用了gmp和mpfr这样的库的原因.

大数乘法有算法的, 不用做竖式那样的乘. arXiv上应该有文献.
15楼2011-06-18 18:19:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by holmescn at 2011-06-18 18:19:07:
python那个大数算法版很快的啊, 比我后来这个算法快很多的. 应该是使用了gmp和mpfr这样的库的原因.

大数乘法有算法的, 不用做竖式那样的乘. arXiv上应该有文献.

仿竖式的话其实就是多项式算法嘛,即使优化过也在n~n*n之间,不管怎么看也很浪费了,相比于GPU而言。
如果这么确定,后面除了join之外也没看出来什么耗时的操作了,还有一个麻烦可能是数组的合并操作,append那里。
漩涡的中心有一块空地,空空的。
16楼2011-06-18 18:36:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

引用回帖:
Originally posted by huycwork at 2011-06-18 18:36:01:
仿竖式的话其实就是多项式算法嘛,即使优化过也在n~n*n之间,不管怎么看也很浪费了,相比于GPU而言。
如果这么确定,后面除了join之外也没看出来什么耗时的操作了,还有一个麻烦可能是数组的合并操作,append ...

这里转换成字符串和用字符串做比较可能是有点低效, 特别是那个 not in, 可能是问题的关键, 不过没有做profile, 这个算法在不做大数运算的情况下,还算一般吧。 改成C的可能就快了。一些分配内存的动作也耗时
17楼2011-06-18 22:09:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+4): 鼓励交流! 2011-06-19 17:20:02
嗯,里面的magic number都是可以手工算出来的(不是我瞒天过海哦),计算过程和意义省略了...让大家猜猜看吧

原理类似因子分解,嗯
CODE:
#include

int tag[101];

int main(){
    int dup[7] = {0, 0, 49, 98, 156, 204, 266};
    int i, j, t;
    int count = 99*99;

    for(i=2; i<=10; i++){
        if(tag[i]) continue;
        for(t=0, j=i; j<=100; j*=i){
            tag[j] = 1;
            t++;
        }
        count -= dup[t];
    }

    printf("%d\n", count);

    return 0;
}

[ Last edited by sudo on 2011-6-19 at 09:01 ]
18楼2011-06-18 23:00:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qinghuoly

木虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流,欢迎常来程序语言版! 2011-06-19 17:20:36
引用回帖:
Originally posted by holmescn at 2011-06-18 10:23:25:
OK, 完成 Python版的质数分解法, 不过不是很快,大概要3秒左右吧
[code]
# coding: utf-8

factorsOfA = []

for a in xrange(2, 101):
    u = 2
    n = 0
    x = a
    factors = []
    while u & ...

J语言啊,APL语言的替代版。

代码简洁精炼,够cool。话说欧拉工程上好多题目都有相应的J语言解法。
天地为帐,日月为灯,风雷为号角,云虹为旗令,山川为阵图,草木为兵卒。运阴阳五行为谋,策古今兴替为略。
19楼2011-06-19 00:18:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qinghuoly

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by holmescn at 2011-06-18 10:23:25:
OK, 完成 Python版的质数分解法, 不过不是很快,大概要3秒左右吧
[code]
# coding: utf-8

factorsOfA = []

for a in xrange(2, 101):
    u = 2
    n = 0
    x = a
    factors = []
    while u & ...

J语言啊,APL语言的替代版。

代码简洁精炼,够cool。话说欧拉工程上好多题目都有相应的J语言解法。
天地为帐,日月为灯,风雷为号角,云虹为旗令,山川为阵图,草木为兵卒。运阴阳五行为谋,策古今兴替为略。
20楼2011-06-19 00:26:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 有没有大神帮我看看基金代码 28+4 1234567wang 2026-08-24 10/500 2026-08-25 19:15 by lfy8008
[基金申请] 今天务委会开完了,明天出结果吗 +13 angus9576 2026-08-25 13/650 2026-08-25 18:24 by miguan3344
[基金申请] 某些机构,以效率低为荣,以效率低作为存在感 +9 yuleib84 2026-08-25 10/500 2026-08-25 17:14 by alexon
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 +6 ziyangfang 2026-08-25 8/400 2026-08-25 16:28 by 宝贝的猪
[基金申请] 什么时候开奖? +12 CrisMessi 2026-08-18 13/650 2026-08-25 14:40 by ZJTJZ
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +3 苏东坡二世 2026-08-23 3/150 2026-08-25 10:35 by shisan1313
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +5 process2012 2026-08-23 7/350 2026-08-25 09:42 by huixian257
[基金申请] 今天基金会出结果吗?20260819 +17 kkkl_v 2026-08-19 18/900 2026-08-25 09:41 by windflowerwy
[基金申请] 只有每年这种时候来逛逛小木虫 +25 yaoyewhu2008 2026-08-20 27/1350 2026-08-25 08:01 by Equinoxhua
[基金申请] 能否退出参与的面上项目解除限项 +21 koalala 2026-08-24 24/1200 2026-08-24 19:25 by 家与远方
[基金申请] 让我中一个面上吧! +13 大萍1987 2026-08-20 16/800 2026-08-24 10:23 by 太傻了
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
信息提示
请填处理意见