- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 1259 Sum of Consecutive Primes 1240 Faulty Odometer 1231 The Embarrassed Cryptography 1214 信号分析 1203 The Cubic End 1099 Packing Passengers 1014 Specialized Four-Dig 1119 Factstone Benchmark 1500 Prime Gap 1259 Sum of Consecutive Primes 给出一个正整数,求出它有多少种方法可以表示成连续的素数的和。 例如53 = 5 + 7 + 11 + 13 + 17 = 53,共有两种方法。 数据范围为[2, 10000] 解题思路 先求出10000以内的所有素数。 对每个输入,枚举连续的素数的起点,寻找是否有一段连续的素数与它相等,如果有则累加答案。 求质数 1240 Faulty Odometer 有个损坏的里程表,不能显示数字4,会从数字3直接跳到数字5。 给出里程表的读数,求出实际里程。 解题思路 里程表能显示的数字为”012356789” 总共9个 等价于九进制 以九进制的方式计算实际里程 1231 The Embarrassed Cryptography 给出两个正整数K和L,问K是否存在小于L的质因数,有的话则找出最小的质因数。 4 = K = 10100 , 2 = L = 106 解题思路 先预处理不超过106 的所有素数。(筛法) 对每个不超过L的素数,检查是否能整除K。 高精度除法。(压缩) m=strlen(s); if (m%9==0) k=0; else k=9-m%9; for (i=m;i=0;i--) s[i+k]=s[i]; for (i=0;ik;i++) s[i]=0; m=strlen(s)/9; for (i=0;im;i++) { x[i]=0; for (j=0;j9;j++) x[i]=x[i]*10+s[i*9+j]-0; } ans=-1; for (i=0;inpp[i]l;i++) { temp=0; for (j=0;jm;j++) temp=( (long long) temp * 1000000000 + x[j] ) % p[i]; if (temp==0) { ans=p[i]; break; } } 1214 信号分析 数列a1=1, a3=3 a2n = an a4n+1 = 2*a2n+1 – an a4n+3 = 3*a2n+1 - 2*an 给出L,求1=i=L中aL=L的个数 解题思路 找规律。按二进制找。 a(1)=1 a(10)=1 a(11)=11 a(100)=1 a(101)=101 a(110)=11 a(111)=111 猜想规律:数列的第n项为n的二进制串的倒置。 证明:用数学归纳法证明 当n=1和3时,a(1)=1,a(11)=11满足。 设n=xyz,则a(xyz0)=a(xyz)=zyx=0zyx,满足; a(xyz01)=2*a(xyz1)-a(xyz)=1zyx0-zyx =10zyx,满足; a(xyz11)=3*a(xyz1)-2*a(xyz)=1zyx0+1zyx-zyx0 =11zyx,满足。 因此得到证明。 解题思路 问题转换成求1=i=L的二进制里有多少个是回文串。 枚举构成回文串的其中一半数字,从而构造得到回文串,再与L比较大小。 L最多为32位,因此枚举的二进制串最多为16位。 void dfs(unsigned n,unsigned lev) { if (lev==0) { cal(n); return; } dfs(n1,lev-1); dfs((n1)+1,lev-1); return; } ans=0; dfs(0,16); void cal(unsigned n) { if (n==0) return; unsigned temp=n,l=0; while (temp0) { temp=1; l++; } temp=(nl)|reverse(n); if (temp=L) ans++; temp=(n(l-1))|reverse(n1); if (temp=L) ans++; return; } unsigned reverse(unsigned n) { unsigned ret=0; while (n0) {
文档评论(0)