BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 



求个算法。
首页 » 论坛 » Perl »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
大狗狗   帅哥
风云使者



CU编号: 376787
注册:2006-2-24
最后登录: 2009-06-24
帖子:665
精华:0

可用积分:350 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2009-1-4 22:15 

F(n) = 1 + 2 + ,..., + n = (1+n)*n/2
求最小的n,使F(n)拥有超过500个的约数。

100的约数为 (1,2,4,5,10,20,25,50,100)

我的垃圾新手写法。
@@count=0
def yushu(num)
        (1..num).each{|i| @@count+=1  if num%i == 0}
        puts @@count
end
yushu(100)



您对本贴的看法:鲜花[0] 臭蛋[0]
大狗狗   帅哥
风云使者



CU编号: 376787
注册:2006-2-24
最后登录: 2009-06-24
帖子:665
精华:0

可用积分:350 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2009-1-4 22:17 

额 我理解这个题的意思是说求一个数字,它的约数应该有>=500个。



您对本贴的看法:鲜花[0] 臭蛋[0]
ly5066113   帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-07-03
帖子:5298
精华:0

可用积分:22062 (巨富豪门)
信誉积分:120
专家积分:617 (本版:10)
空间积分:0
推广积分:132

来自:长春
状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2009-1-5 11:04 



$ cat test.pl
#! /usr/bin/perl

use strict;
use warnings;

sub sum {
        my $sum = shift;

        $sum = (1 + $sum) * $sum / 2;

        return $sum;
}

sub yueshu {
        my $num = shift;
        my $max = $num;
        my $yueshu = 2;
        my $i = 2;

        while ( $i < $max )
        {
                if ( $num % $i == 0 )
                {
                        $max = $num / $i;
                        if ( $i == $max )
                        {
                                $yueshu ++;
                        }
                        else
                        {
                                $yueshu += 2;
                        }
                }

                $i ++;
        }

        return $yueshu;
}

my $num = 1;

while( yueshu(sum($num)) < 500 )
{
        $num ++;
}

print $num;
$ time test.pl
12375
real    0m51.475s
user    0m31.870s
sys     0m0.020s




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
版主 MMMIX
广告杀手-法王




CU编号: 342513
注册:2005-11-28
最后登录: 2009-07-04
帖子:13379
精华:0

可用积分:39990 (巨富豪门)
信誉积分:100
专家积分:229 (本版:45)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


4楼 发表于 2009-1-5 12:08 

回复 #3 ly5066113 的帖子

做的运算太多了。要是顺序求因数的话,只要求到原数的平方根就行了。当然也可以先将原数分解为质因数,然后用质因数的组合得到原数的所有因数。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天地不仁, 以万物为刍狗!
大狗狗   帅哥
风云使者



CU编号: 376787
注册:2006-2-24
最后登录: 2009-06-24
帖子:665
精华:0

可用积分:350 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2009-1-5 12:16 



QUOTE:
原帖由 ly5066113 于 2009-1-5 11:04 发表
$ cat test.pl
#! /usr/bin/perl

use strict;
use warnings;

sub sum {
        my $sum = shift;

        $sum = (1 + $sum) * $sum / 2;

        return $sum;
}

sub yueshu {
        m ...

def yueshu(num)
    count=0
    arr=[]
    (1..num).each  do  |i|
        count += 1 and  arr << i   if  num%i ==0
    
        end

    return arr
end
puts yueshu(12375)

1
3
5
9
11
15
25
33
45
55
75
99
125
165
225
275
375
495
825
1125
1375
2475
4125
12375

你这个数字也没有500个约数阿。。。

[ 本帖最后由 大狗狗 于 2009-1-5 12:19 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
大狗狗   帅哥
风云使者



CU编号: 376787
注册:2006-2-24
最后登录: 2009-06-24
帖子:665
精华:0

可用积分:350 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2009-1-5 12:18 



QUOTE:
原帖由 MMMIX 于 2009-1-5 12:08 发表
做的运算太多了。要是顺序求因数的话,只要求到原数的平方根就行了。当然也可以先将原数分解为质因数,然后用质因数的组合得到原数的所有因数。

数学没有学好。这些概念都快忘记光了。。/



您对本贴的看法:鲜花[0] 臭蛋[0]
ly5066113   帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-07-03
帖子:5298
精华:0

可用积分:22062 (巨富豪门)
信誉积分:120
专家积分:617 (本版:10)
空间积分:0
推广积分:132

来自:长春
状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2009-1-5 12:19 

回复 #4 MMMIX 的帖子

我这个就是算到平方根呀。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
ly5066113   帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-07-03
帖子:5298
精华:0

可用积分:22062 (巨富豪门)
信誉积分:120
专家积分:617 (本版:10)
空间积分:0
推广积分:132

来自:长春
状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2009-1-5 12:21 

回复 #5 大狗狗 的帖子

你题目要求的是n,拥有500个约数的是F(n)。
也就是 (1 + 12735) * 12735 / 2



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
ynchnluiti (andy)
精灵使



CU编号: 90672
注册:2003-8-29
最后登录: 2009-07-03
帖子:3715
精华:0

可用积分:24776 (巨富豪门)
信誉积分:100
专家积分:646 (本版:98)
空间积分:0
推广积分:1456

状态:...离线...

[个人空间] [短信] [博客]


9楼 发表于 2009-1-5 13:10 



QUOTE:
原帖由 大狗狗 于 2009-1-5 12:18 发表


数学没有学好。这些概念都快忘记光了。。/

我已经忘光了。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天行健,君子以自强不息
发奋忘食,乐以忘优,不知老之将至
温故而知新
大狗狗   帅哥
风云使者



CU编号: 376787
注册:2006-2-24
最后登录: 2009-06-24
帖子:665
精华:0

可用积分:350 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2009-1-5 13:24 



QUOTE:
原帖由 ly5066113 于 2009-1-5 12:21 发表
你题目要求的是n,拥有500个约数的是F(n)。
也就是 (1 + 12735) * 12735 / 2

约数的个数和n 有关系吗?

F(n)=1+2+..+n=(1+n)*n/2  这个和一个数所拥有的约数个数有关系吗?



您对本贴的看法:鲜花[0] 臭蛋[0]

首页 » 论坛 » Perl »


 


Copyright © 2001-2009 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.068836 second(s), 4 queries , Gzip enabled