免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 大狗狗
打印 上一主题 下一主题

求个算法。 [复制链接]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
11 [报告]
发表于 2009-01-05 13:35 |只看该作者

回复 #10 大狗狗 的帖子

晕死啊,题目是你出的啊!你还没读懂?
n=1  F(n)=1
n=2  F(n)=3
n=3  F(n)=6
......
n=12735 F(n)=81096480

要求的是最小的n,使得F(n)有500个约数。

可以看到F(n)是一个不连续的数列,所以你2楼的说法是不对的,最小的拥有500个约数的数字,不一定是F(n)中的一个。

论坛徽章:
0
12 [报告]
发表于 2009-01-05 13:47 |只看该作者
原帖由 ly5066113 于 2009-1-5 13:35 发表
晕死啊,题目是你出的啊!你还没读懂?
n=1  F(n)=1
n=2  F(n)=3
n=3  F(n)=6
......
n=12735 F(n)=81096480

要求的是最小的n,使得F(n)有500个约数。

可以看到F(n)是一个不连续的数列,所以你2楼的 ...


这个我明白。只是我想知道  F(n) 的公约数的个数和 n的关系。应该是没有关系的 ,f(n) -->n  这个是有关系的。

那么我就是想知道 f(n) 例如 f(100)的公约数的个数 有啥好的求法。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
13 [报告]
发表于 2009-01-05 13:56 |只看该作者

回复 #12 大狗狗 的帖子

就是我代码里的 sub yueshu 这个子函数呀。

首先1和这个数本身一定是它的约数,所以从2开始查找它的约数,一直找到它的平方根为止。
对与完全平方数,我的代码是没问题的,非完全平方数是多做了一些计算的。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
14 [报告]
发表于 2009-01-05 14:04 |只看该作者

回复 #12 大狗狗 的帖子

改进版:

  1. #! /usr/bin/perl

  2. use strict;
  3. use warnings;

  4. sub yueshu {
  5.         my $num = shift;
  6.         my $max = int(sqrt($num));
  7.         my $yueshu = 2;
  8.         my $i = 2;

  9.         while ( $i <= $max )
  10.         {
  11.                 if ( $num % $i == 0 )
  12.                 {
  13.                         if ( $i == $max )
  14.                         {
  15.                                 $yueshu ++;
  16.                         }
  17.                         else
  18.                         {
  19.                                 $yueshu += 2;
  20.                         }
  21.                 }

  22.                 $i ++;
  23.         }

  24.         return $yueshu;
  25. }

  26. print yueshu(100);
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
15 [报告]
发表于 2009-01-05 14:11 |只看该作者
原帖由 ly5066113 于 2009-1-5 12:19 发表
我这个就是算到平方根呀。

哦,是我没看太仔细。

论坛徽章:
0
16 [报告]
发表于 2009-01-06 14:39 |只看该作者
原帖由 ly5066113 于 2009-1-5 12:21 发表
你题目要求的是n,拥有500个约数的是F(n)。
也就是 (1 + 12735) * 12735 / 2


(1 + 12735) * 12735 / 2=81096480

=2^5*3^2*5^1*199^1*283^1

(5+1)*(2+1)*(1+1)*(1+1)*(1+1)=144 这个数应该有144个约数


而不是>500个约数。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
17 [报告]
发表于 2009-01-06 17:21 |只看该作者

回复 #16 大狗狗 的帖子

晕,写错了,应该是:

(1 + 12375) * 12375 / 2 = 76576500

论坛徽章:
0
18 [报告]
发表于 2009-01-06 17:41 |只看该作者
原帖由 ly5066113 于 2009-1-6 17:21 发表
晕,写错了,应该是:

(1 + 12375) * 12375 / 2 = 76576500



32672640
18378360

我这里随便2个数字 都比你的小  却有512个约数。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
19 [报告]
发表于 2009-01-06 18:00 |只看该作者

回复 #18 大狗狗 的帖子

这就说明你还没理解题目。
32672640 不是 F(n) 中的一个呀。

论坛徽章:
0
20 [报告]
发表于 2009-01-06 18:04 |只看该作者
原帖由 ly5066113 于 2009-1-6 18:00 发表
这就说明你还没理解题目。
32672640 不是 F(n) 中的一个呀。



SORRY 看来是我的理解错误了。

我是想求一个最小数字 它的约数一定要大于或者等于500 。。

看来我是瞎折腾来着///

puts yueshu(2*3*5*7*11*13*19*21)

把约数的个数求法仔细研究。结果还是没有个规律。

不钻这个牛角了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP