C++编程问题 Switching Channels Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 255 Accep

我想要源程序,翻译,和简单的解释

?这个是acm里面这个题目的一些要求吧,在2000ms内运行完成,内存容量小于30000k, 作对这个题目已经有255个人了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-28
算法改进:
1.上面这个程序是以根号n为循环边界,个人认为这时还不如用n/2,开根可比除2慢多了。
2.当得到n的第一个因子,比如说7时,不如n /= 7;再重新从2~n/2循环判断。举例说:23324 = 2*2*7*7*7*17,如果用上例的方法,会计算根号23324或者23324/2次,而用改进2中的方法的话,只用到2+2+7/2 + 7/2 + 7/2 + 17/2次也就是27次运算,11662:27可以说是很悬殊了。

按照以上改进我写了一个拆分整数的程序,结果是最简因子形式(质因子),计算普通因子个数的任务就交给你了,有了高中排列组合的知识,很好算的,小心其中重复出现的质因子。

#include <iostream>
using namespace std;
int child(int n) //如果是素数则返回原数n,否则返回一个因子
{
if (n <= 2)return n;
for (int i = 2; i < n/2; i ++)
if (n%i == 0)return i;
return n;
}
int main()
{
int n;
cin>>n;
if (n<=0)
if (child(n) == n)
else
for (;;)
{
int factor = child(n);
cout<<factor<<" ";
n /= factor;
if (n == 1)break;
}
cout<<endl;
return 0;
}

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网