水仙花数算法研究及其C语言代码实现.docxVIP

水仙花数算法研究及其C语言代码实现.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
水仙花数算法研究及其C语言代码实现

/**水仙花数算法研究及其C语言代码实现BnBn-1...B1=X(N)= sum{ digit = 0..9, count_digit[digit] * power(digit, N)}@author 东海陈光剑剑魔书仙读书录水仙花数的相关数学证明及其算法源程序实现The Computer Solution Of Narcissistic Number Mathematical Proofs东海陈光剑剑魔书仙读书录 2013.4.28 @ iSoftStone[参数说明]N(n):n位十进制正整数N(n)MAX(n):n位十进制正整数最大值10 n -1MIN(n):n位十进制正整数最大值10 n-1Nar(n):n位十进制正整数中的水仙花数b n-1,b n-2,...,b 1,b 0:N(n)各位十进制数位上的数字,显然b n-10.k 0 ,k 1 ,...,k 9 : N(n)中数字0,1,2,...,9 分别总计出现的次数.显然k i =0 sum(k i )=n.k 0 *0^n + k 1 *1^n + ...+ k 9 * 9^n =N(n).(i=0,1,2...,9)穷举所有十元组(k 0 ,k 1 ,...,k 9 );对满足条件[*]的一个特定的十元组(k 0 ,k 1 ,...,k 9 )*,即可确定唯一的一个Nar(n).[定理]0. MIN(n)Nar(n)MAX(n)1. n60,Nar(n)不存在.2. 对满足条件[*]的一个特定的十元组(k 0 ,k 1 ,...,k 9 )*,确定唯一的一个Nar(n).3. 不定方程k 0 + k 1 +...+ k 9 = n 非负整数解十元组Sj的个数为C{10+n-1,10-1}=C{9+n,9}= (9+n)!/[(9!)(n!)]组.[算法描述]Step1.求解不定方程k 0 + k 1 +...+ k 9 = n 所有的非负整数解S集.Step2.对每个解Sj计算 k 0 *0^n + k 1 *1^n + ...+ k 9 * 9^n =T(n) 2.1 判断T(n)是否满足定理[0],if YES ,goto 2.2; else Next S(j+1); 2.2 判断T(n)中各位数字上的0,1,2,3,...,9 的个数是否恰好等于Sj=(k 0 ,k 1 ,...,k 9 ). if YES, T(n)=N(n)=Nar(n), print T(n); else Next S(j+1);Step3.重复Step 2, until 穷举完毕所有的解S集.*/#include stdio.h#include time.h#define N 21#define G 9 //当N=21时,G = count_digit9 最多出现的次数是9次 ----- count_count_digit[i] MAX/i^N/**G:N位水仙花数中数字9最多出现的次数,超过G个9之后,水仙花表达式算出来的值就不是N位数了(大于N位数)二元组(N,G)如下:--------NG--------112131425262728293103113124134144155165176187197208219221023112413251426152717281929213024312632293332---------343435353636373738383939---------*///int count_digit[10]={0}; //count_digit[10]用来得到0-9数字出现的个数int p[10][N]={0};//p数组用来计算出0-9的N次方。int count_mul_power[10][N]={0}; //count_mul_power用来计算数字出现次数乘以它的N次方//int count=0; //计算得到几个水仙花数了,得到2个以后就结束程序void init_power() //这个函数用来获得0-9的N次方,存在p数组里{ int i,j,k; for(i=0;i10;i++) p[i][N-1]=i; //矩阵每行全部初始化为(0,1,2,3,4,5,6,7,8,9) for(k=2;k10;k++) { for(i=1;iN;i++) { for(j=N-1;j=0;j--) { p[k][j]*=k; // 计算k=0-9的N次方 p[i][N]=i^N } f

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档