版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四讲第四讲关于数的一些简单问题关于数的一些简单问题ACMACM算法与程序设计算法与程序设计列出完数列出完数n题目内容题目内容n 自然数中,完数寥若晨星,请在从自然数中,完数寥若晨星,请在从1到某个整到某个整数范围中打印出所有的完数来。所谓数范围中打印出所有的完数来。所谓“完数是完数是指一个数恰好等于它的所有不同因子之和。例指一个数恰好等于它的所有不同因子之和。例如,如,6是完数,因为是完数,因为6=1+2+3。而。而24不是完数,不是完数,由于由于n 24 1+2+3+4+6+8+12(=36)。n输入描述输入描述n 输入数据中含有一些整数输入数据中含有一些整数n(1n10000) n输出描
2、述输出描述n 对于每个整数对于每个整数n,输出所有不大于,输出所有不大于n的完数。的完数。每个整数每个整数n的输出由的输出由n引导,跟上冒号,然后是引导,跟上冒号,然后是由空格开道的一个个完数,每个由空格开道的一个个完数,每个n的完数列表应的完数列表应占独立的一行。占独立的一行。n输入样例输入样例n 100n 5000n输出样例输出样例n 100: 6 28n 5000: 6 28 496题目分析题目分析n如果针对每个整数都搜索一次如果针对每个整数都搜索一次完数,时间会花费较多,由于完数,时间会花费较多,由于完数较少,可以先找出完数较少,可以先找出10000以内的所有完数,然后再针对以内的所有
3、完数,然后再针对n查表。查表。参考源代码参考源代码n#include nint main(void)nnint i,j,k=0,n,sum,a100;nfor(i=2;i10000;i+=2) /完数一定为偶数完数一定为偶数nnsum=1;nfor(j=2;j=i/2;j+)nnif(i%j=0)nsum+=j;nnif(sum=i)nak+=i;n参考源代码参考源代码nwhile(scanf(%d,&n)=1)nnprintf(%d: ,n);nfor(i=0;ik;i+)nnif(ai=n)nprintf(%d ,ai);nnprintf(n);nnreturn 0;n对称三位数素
4、数对称三位数素数n题目内容题目内容n 判断一个数是否为对称三位数素数。所谓判断一个数是否为对称三位数素数。所谓“对对称是指一个数,倒过来还是该数。例如,称是指一个数,倒过来还是该数。例如,375不是对称数,因为倒过来变成了不是对称数,因为倒过来变成了573。n输入描述输入描述n 输入数据含有不多于输入数据含有不多于50个的正整数个的正整数(0n232)。n输出描述输出描述n 对于每个对于每个n,如果该数是对称三位数素数,则,如果该数是对称三位数素数,则输出输出“Yes”,否则输出,否则输出“No”。每个判断结果单独。每个判断结果单独一行。一行。n输入样例输入样例n 11 101 272n输出样
5、例输出样例n Non Yesn No题目分析题目分析n三位对称只须判断个数与百位三位对称只须判断个数与百位是否相等。是否相等。参考源代码参考源代码n#include n#include nint isprime(int a)nnint i;nint s=(int)sqrt(double)a);nfor(i=2;i100&n1000n &n/100=n%10 n &isprime(n)n ?Yesn:Non);nnreturn 0;n五位以内的对称素数五位以内的对称素数n题目内容题目内容n 判断一个数是否为对称且不大于五位数的素判断一个数是否为对称且不大于五位数的素数。数
6、。n输入描述输入描述n 输入数据含有不多于输入数据含有不多于50个的正整数个的正整数n(0n232)。n输出描述输出描述n 对于每个对于每个n,如果该数是不大于五位数的对称,如果该数是不大于五位数的对称素数,则输出素数,则输出“Yes”,否则输出,否则输出“No”。每个判断。每个判断结果单独列一行。结果单独列一行。n输入样例输入样例n 11 101 272n输出样例输出样例n Yesn Yesn No题目分析题目分析n怎样判断每位对称素数?怎样判断每位对称素数?参考源代码参考源代码n#include nint isprime(int n)nnint i;nif(n=1) /1不是素数不是素数n
7、return 0;nif(n!=2&n%2=0)/除开除开2以外的以外的2偶数偶数nreturn 0;nfor(i=3;i*i=n;i+=2)/恰好跳过恰好跳过2,3,5,7,它们是素数,它们是素数nnif(n%i=0)nreturn 0;nnreturn 1;n参考源代码参考源代码nint issym(int n)nnif(n100&n10000&n/1000=n%10*10+n/10%10)nreturn 1;nreturn 0;n参考源代码参考源代码nint main(void)nnint n;nwhile(scanf(%d,&n)=1)nnprintf(
8、%sn,n100000&issym(n)n &isprime(n)?Yes:No);nnreturn 0;n An easy problemnTime Limit: 6000/3000 MS (Java/Others) n Memory Limit: 32768/32768 K (Java/Others)nProblem Descriptionn When Teddy was a child , he was always thinking about some simple math problems ,such as “What its 1 cup of water plu
9、s 1 pile of dough .” , “100 yuan buy 100 pig” .etc.n One day Teddy met a old man in his dream , in that dream the man whose name was“RuLai” gave Teddy a problem :Given an N , can you calculate how many ways to write N as i * j + i + j (0 i = j) ?Teddy found the answer when N was less than 10but if N
10、 get bigger , he found it was too difficult for him to solve.Well , you clever ACMers ,could you help little Teddy to solve this problem and let him have a good dream ?nInputn The first line contain a T(T = 2000) . followed by T lines ,each line contain an integer N (0=N = ).n Outputn For each case,
11、 output the number of ways in one line. 1010nSample input: n 2 n 1 n 3 n Sample output:n 0n 1题目分析:题目分析:n思路思路1:n 将等式变形为将等式变形为 N + 1 = (i + 1) * (j + 1),由于由于i = j,只需要枚举,只需要枚举i (枚举范围从(枚举范围从1到到 ),然后判断是否满足,直接计数),然后判断是否满足,直接计数即可。即可。Nn思路思路2:n 同样将等式变形同样将等式变形N + 1 = (i + 1) * (j + 1)。只需要求出只需要求出N + 1的约数个数,然后分
12、情况处的约数个数,然后分情况处理即可。令理即可。令N + 1的约数个数为的约数个数为fN + 1 n1. 当当N + 1为完全平方数时,为完全平方数时,ans = (fN + 1 2 + 1) / 2n公式可以理解成:所有的约数,去掉公式可以理解成:所有的约数,去掉1和本身和本身之后减之后减2),剩下的可以对称的组成一对一),剩下的可以对称的组成一对一对的答案。对的答案。而分解质因数最有效的方法就是筛出而分解质因数最有效的方法就是筛出 范围内范围内的素数表,然后依次试除。的素数表,然后依次试除。2. 当当N +非完全平方数,同理可得,非完全平方数,同理可得, ans = (fN + 1 2)
13、/ 2 。如何快速的求一个数如何快速的求一个数N的约数个数的约数个数 我们知道我们知道,任何一个自然数任何一个自然数N可以表示成其质因数可以表示成其质因数的幂的乘积的形式的幂的乘积的形式.510由排列组合的乘法原理知,由排列组合的乘法原理知,N的约数个数的约数个数 fN = (a1 + 1) * (a2 + 1)*(an + 1)annaapppN.22111、简单的筛素数、简单的筛素数n其思想是,先假定所有的数都是质数,其思想是,先假定所有的数都是质数,然后从然后从2开始依次筛掉素数的倍数的数。开始依次筛掉素数的倍数的数。 nconst int Max = 100;nbool bpMax +
14、 1; /记录每个数是否是素数记录每个数是否是素数nint p30; /记录筛选出来的素数记录筛选出来的素数nint pCnt; /记录当前筛选出来的素数个数记录当前筛选出来的素数个数nvoid sievePrime()nnint i, j;nmemset(bp, true, sizeof(bp);nbp0 = bp1 = false;nfor (i = 2; i = Max; i+)nnif (bpi) /i是素数是素数nn ppCnt+ = i;n for (j = i * i; j = Max; j += i) /依次筛掉依次筛掉i的的倍数倍数nbpj = false;nnn2、线性筛素
15、数、线性筛素数 n线性筛素数算法能够保证每个合数被且仅被其最小素因子筛掉一次。n综观整个线性筛素数的代码,和普通筛素数的方法比,只是筛的顺序变了。 nconst int Max = 100;nbool bpMax + 1; /记录每个数是否是素数记录每个数是否是素数nint p30; /记录筛选出来的素数记录筛选出来的素数nint pCnt; /记录当前筛选出来的素数个数记录当前筛选出来的素数个数nvoid sievePrime()nnint i, j;nmemset(bp, true, sizeof(bp);nbp0 = bp1 = false;nfor (i = 2; i = Max; i
16、+)nnif (bpi) ppCnt+ = i;nfor (j = 0; j pCnt & i * pj = Max; j+)nnbpi * pj = false;nif (i % pj = 0) break;nnn课后练习:课后练习:Number Sequence链接地址:链接地址:/showproblem.php?pid=1005nProblem Descriptionn A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)
17、 mod 7.Given A, B, and n, you are to calculate the value of f(n).Inputn The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 = A, B = 1000, 1 = n = 100,000,000). Three zeros signal the end of input and this test case is not to be processed.nOutputn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新教材)2026人教版三年级下册数学 2.2.8 归总问题 教学课件
- 2025 网络基础中 5G 与区块链金融网络的安全交易课件
- 统编版语文一年级下册第一单元 质量提优卷(含答案)
- 高耐腐蚀性零件数控加工系统应用可行性研究报告
- 2026年人才合同和人事代理合同(1篇)
- 刑罚执行的程序和监督
- 2025 高中信息技术数据与计算之计算思维在海洋化学数据监测分析中的应用课件
- 2025 高中信息技术数据与计算之算法的鸽群优化算法课件
- 煤气安全培训试卷及答案
- 2025 高中信息技术数据与计算之数据在电商营销渠道效果评估中的应用课件
- 薪资核定及管理办法
- 劳动课自制沙拉课件
- 药膳养生鸡汤培训课件
- 监狱辅警面试题目及答案
- 十五五特殊教育发展提升行动计划
- 医院运营数据统计分析
- 幼儿跑酷培训
- 2025至2030年中国氟化液行业市场运行态势及产业趋势研判报告
- 毕业设计(论文)-包裹分拣机械结构设计
- 徐州地铁考试题库及答案
- 国家助学贷款诚信教育主题班会
评论
0/150
提交评论