|
![]() | 作者: ysfilone [ysfilone]
![]() |
登录 |
我想用下面的函数实现求解 把任意一个自然数(当然是大于一个特定值的)表示成 >=2个的质数之和的 表达式个数,例如:9=2+7=2+2+5=……然后统计数列的个数 sushu(int n); 判断n是否为质数,如果是 返回1,否则返回2 代码: 问题是 为了避免数列重复,如:9=2+2+2+3=2+3+2+2 因该如何做???在上面代码中 把限定条件设为i<=n/2不行的 还有如果要求打印出每个合法的数列 因该怎么办?? 真诚希望各位帮一下小弟,谢谢了~!!! |
地主 发表时间: 04-04-18 08:10 |
![]() | 回复: ysfilone [ysfilone] ![]() |
登录 |
自己定以下 |
B1层 发表时间: 04-04-18 20:03 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
好象没什么好的算法。可以建一个temp文件,将所有的输出暂时输入到文件,然后读出所需的数组。 不知其它人有没有好算法。 |
B2层 发表时间: 04-04-19 13:23 |
![]() | 回复: 286 [unique] ![]() |
登录 |
#include <stdio.h> int buff[100]={0}; bool sushu(int i) { for (int j=2;j<=i/2;j++) if (i%j==0) return false; return true; } bool Fsushu(int n,int beginfrom,int level) { int i,j; if (n==0) { for (j=0;j<level;j++) printf("%d\t",buff[j]); printf("\n"); return true; } if (n<beginfrom) return false; for (i=beginfrom;i<=n;i++) { if (sushu(i)) { buff[level]=i; Fsushu(n-i,i,level+1); } } return false; } void main() { Fsushu(9,2,0); } //以上程序过于完美,因此暂不提供注释和解释。 ![]() ![]() ![]() ![]() ![]() ![]() [此贴被 286(unique) 在 04月19日14时56分 编辑过] |
B3层 发表时间: 04-04-19 14:55 |
![]() | 回复: ysfilone [ysfilone] ![]() |
登录 |
![]() 我判断素数的函数如下: bool sushu(int n) { int i=2; while(i<=n&&(n%i)) i++; if(i==n) return true; else return false; } 显然不如286的 ![]() [此贴被 远山之城(ysfilone) 在 04月20日07时06分 编辑过] |
B4层 发表时间: 04-04-19 18:29 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
int buff[100]={0}; 问题是这个buff[],如果计算比较大的数字就比较占内存,比如计算10000,则需buff[5000] (如果是在处理类似的实际问题好象不妥) 不知是否还有更好的算法? |
B5层 发表时间: 04-04-20 09:34 |
![]() | 回复: vloadpe [vloadpe] ![]() |
登录 |
喝喝喝,这个题本来就很BT,排列太多啦 |
B6层 发表时间: 04-04-20 09:47 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号