- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
回文素数 求不超过1000的回文素数。所谓回文素数是指,对一个整数n从左向右和从由向左读其结果值相同且是素数,即称n为回文素数。 回文素数 *问题分析与算法设计 本题的重点不是判断素数的方法,而是求回文整数。构造回文数的方法很多,这里仅介绍一种最简单的算法。实现思路是先求出一个整数的回文数,再判断是否为素数。 不超过1000的回文数包括二位和三位的回文数,我们采用穷举法来构造一个整数并求与其对应的反序数,若整数与其反序数相等,则该整数是回文数。 回文素数 *程序说明与注释#includestdio.h int a(int n)int main(){int i,j,t,k,s;printf(“Following are palindrome primes not greater than 1000:\n”);for(i=0;i=9;++i) //穷举第一位for(j=0;j=9;++j) //穷举第二位for(k=0;k=9;++k) //穷举第三位{s=i*100 + j*10 + k; //计算组成的整数t=k*100 + j*10 + i; //计算对应的反序数if((s10||t10) s==t a(s)) //若大于10且为回文素数,则输出{ printf(%d\t,s);}}return 0;} //判断参数n是否为素数int a(int n){int i;for(i=2;i(n-1)/2;+=i){if(n%i == 0)return 0;}return 1;} *运行结果Following are palindrome primes not greater than 1000:11 101 131 151 181 191 313 353 373 383 727 787 797 919 929 素数幻方 求四阶的素数幻方。即在一个4X4 的矩阵中,每一个格填 入一个数字,使每一行、每一列和两条对角线上的4 个数字所组成的四位数,均为可逆素数。 素数幻方 *问题分析与算法设计有了前面的基础,本题应当说是不困难的。最简单的算法是:采用穷举法,设定4X4矩阵中每一个元素的值后,判断每一行、每一列和两条对角线上的4个数字组成的四位数是否都是可逆素数,若是则求出了满足题意的一个解。这种算法在原理是对的,也一定可以求出满足题意的全部解。但是,按照这一思路编出的程序效率很低,在微机上几个小时也不会运行结束。这一算法致命的缺陷是:要穷举和判断的情况过多。 素数幻方 充分利用题目中的“每一个四位数都是可逆素数”这一条件,可以放弃对矩阵中每个元素进行的穷举的算法,先求出全部的四位可逆素数(204个),以矩阵的行为单位,在四位可逆素数的范围内进行穷举,然后将穷举的四位整数分解为数字后,再进行列和对角线方向的条件判断,改进的算法与最初的算法相比,大大地减少了穷举的次数。 素数幻方 考虑矩阵的第一行和最后一行数字,它们分别是列方向四位数的第一个数字和最后一个数字,由于这些四位数也必须是可逆素数,所以矩阵的每一行和最后一行中的各个数字都不能为偶数或5。 这样穷举矩阵的第一行和最后一行时,它们的取值范围是:所有位的数字均不是偶数或5的四位可逆数。由于符合这一条件的四位可逆素数很少,所以这一范围限制又一次减少了穷举的次数。 简单题 一个奇异的三位数 一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,求这个三位数。 一个奇异的三位数 *问题分析与算法设计根据题意可知,七进制和九进制表示的这全自然数的每一位一定小于7,可设其七进制数形式为kji(i、j、k的取值分别为1~6),然后设其九进制表示形式为ijk。 一个奇异的三位数 *程序说明与注释#includestdio.hint main(){int i,j,k;for(i=1;i7;i++)for(j=0;j7;j++)for(k=1;k7;k++)if(i*9*9+j*9+k==i+j*7+k*7*7){printf(The special number with 3 digits is:);printf(%d%d%d(7)=%d%d%d(9)=%d(10)\n,k,j,i,i,j,k,i*9*9+j*9+k);}} *运行结果The special number with 3 digits is:503(7)=305(9)=248(10) 8除不尽的自然数 一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被
文档评论(0)