| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1949 人关注过本帖
标题:考一下大家的算法...
取消只看楼主 加入收藏
蓝紫色
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-28
收藏
 问题点数:0 回复次数:2 
考一下大家的算法...

这是第38次编程比赛第一题:

在N以内(小于等于N)找出一个数,要求:
1.这个数的约数的个数达到最大,
2.如果有好几个数满足条件1,仅取最小的那个数

说明:
1) 1<N<=2^32-1,每个N的时限是1000ms。内存限制256M,注意使用适当数据类型,以免溢出。

函数原型:
// n: 范围
// result:结果,存放符合条件的那个数
// count:存入存放符合条件的那个数的约数的个数
// arr:存放那个数的所有约数,按照从小到大的顺序
void Search(unsigned long n, unsigned long *result,int *count,unsigned long arr[]);

例:
n=100, 则 result=60,
在100以内,60和90的约数个数同为12个,达到这个范围内所有整数中,其约数个数的最大值,但60比90小,所有正确答案为60。60共有12个约数:1,2,3,4,5,6,10.12.15.20.30,60.所以count应该存入12,从arr[0]开始,应该依次写入1,2,3,4,5,6,10.12.15.20.30,60。


写出你们的算法就可以了(当然有程序的也可拿出来),考虑空间以及时间方面的问题,比如说省掉一些不必要的计算

搜索更多相关主题的帖子: 算法 内存 约数 result count 
2006-09-29 14:00
蓝紫色
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-28
收藏
得分:0 
不好意思,我也不太懂,想看看大家是怎么想的.

这道题就是求"超级合数"的过程.(9楼的为前50个超级合数)

应该可以通过质因数来求,而又可以缩小范围:求质因数和筛选素数(应该可以sqrt(n)内);n>N/2……这些方面大家应该可以想得比我多
2006-10-02 08:20
蓝紫色
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-28
收藏
得分:0 

题目是编程比赛题,不是我出的,我只是拿出来看看大家是怎么算的.因为那道题要是按常规算的话,肯定溢出,P4机速度算的话时间也要很久.

时间并没有1S的限制,不过空间上有256M的限制.

超级合数要满足一些条件的,如肯定大于N/2,筛除素数(这个又不必N内求),等

2006-10-02 22:07
快速回复:考一下大家的算法...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016476 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved