第四周简单题三_第1页
第四周简单题三_第2页
第四周简单题三_第3页
第四周简单题三_第4页
第四周简单题三_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四讲关于数的一些简单问题ACM算法与程序设计7/23/20221列出完数题目内容 自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来。所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6是完数,因为6=1+2+3。而24不是完数,因为 24 1+2+3+4+6+8+12(=36)。输入描述 输入数据中含有一些整数n(1n10000)7/23/20222输出描述 对于每个整数n,输出所有不大于n的完数。每个整数n的输出由n引导,跟上冒号,然后是由空格开道的一个个完数,每个n的完数列表应占独立的一行。输入样例 100 5000输出样例 100: 6 28 5000: 6

2、28 4967/23/20223题目分析如果针对每个整数都搜索一次完数,时间会花费较多,由于完数较少,可以先找出10000以内的所有完数,然后再针对n查表。7/23/20224参考源代码#include int main(void)int i,j,k=0,n,sum,a100;for(i=2;i10000;i+=2) /完数一定为偶数sum=1;for(j=2;j=i/2;j+)if(i%j=0)sum+=j;if(sum=i)ak+=i;7/23/20225参考源代码while(scanf(%d,&n)=1)printf(%d: ,n);for(i=0;ik;i+)if(ai=n)print

3、f(%d ,ai);printf(n);return 0;7/23/20226对称三位数素数题目内容 判断一个数是否为对称三位数素数。所谓“对称”是指一个数,倒过来还是该数。例如,375不是对称数,因为倒过来变成了573。输入描述 输入数据含有不多于50个的正整数(0n232)。输出描述 对于每个n,如果该数是对称三位数素数,则输出“Yes”,否则输出“No”。每个判断结果单独一行。7/23/20227输入样例 11 101 272输出样例 No Yes No7/23/20228题目分析三位对称只须判断个数与百位是否相等。7/23/20229参考源代码#include #include int

4、 isprime(int a)int i;int s=(int)sqrt(double)a);for(i=2;i100&n1000 &n/100=n%10 &isprime(n) ?Yesn:Non);return 0;7/23/202211五位以内的对称素数题目内容 判断一个数是否为对称且不大于五位数的素数。输入描述 输入数据含有不多于50个的正整数n(0n232)。输出描述 对于每个n,如果该数是不大于五位数的对称素数,则输出“Yes”,否则输出“No”。每个判断结果单独列一行。7/23/202212输入样例 11 101 272输出样例 Yes Yes No7/23/202213题目分析

5、怎样判断每位对称素数?7/23/202214参考源代码#include int isprime(int n)int i;if(n=1) /1不是素数return 0;if(n!=2&n%2=0)/除开2以外的2偶数return 0;for(i=3;i*i=n;i+=2)/恰好跳过2,3,5,7,它们是素数if(n%i=0)return 0;return 1;7/23/202215参考源代码int issym(int n)if(n100&n10000&n/1000=n%10*10+n/10%10)return 1;return 0;7/23/202216参考源代码int main(void)in

6、t n;while(scanf(%d,&n)=1)printf(%sn,n100000&issym(n) &isprime(n)?Yes:No);return 0;7/23/202217 An easy problemTime Limit: 6000/3000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)7/23/202218Problem Description When Teddy was a child , he was always thinking about some simple math problems ,

7、such as “What its 1 cup of water plus 1 pile of dough .” , “100 yuan buy 100 pig” .etc. 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 ans

8、wer when N was less than 10but if N 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 ?7/23/202219Input The first line contain a T(T = 2000) . followed by T lines ,each line contain an

9、 integer N (0=N = ).Output For each case, output the number of ways in one line. 7/23/202220Sample input: 2 1 3 Sample output: 0 17/23/202221题目分析:思路1: 将等式变形为 N + 1 = (i + 1) * (j + 1),由于i = j,只需要枚举i (枚举范围从1到 ),然后判断是否满足,直接计数即可。7/23/202222思路2: 同样将等式变形N + 1 = (i + 1) * (j + 1)。只需要求出N + 1的约数个数,然后分情况处理即可

10、。令N + 1的约数个数为fN + 1 1. 当N + 1为完全平方数时,ans = (fN + 1 2 + 1) / 2公式可以理解成:所有的约数,去掉1和本身之后(减2),剩下的可以对称的组成一对一对的答案。7/23/202223而分解质因数最有效的方法就是筛出 范围内的素数表,然后依次试除。2. 当N +非完全平方数,同理可得, ans = (fN + 1 2) / 2 。如何快速的求一个数N的约数个数 我们知道,任何一个自然数N可以表示成其质因数的幂的乘积的形式.由排列组合的乘法原理知,N的约数个数 fN = (a1 + 1) * (a2 + 1)*(an + 1)7/23/20222

11、41、简单的筛素数其思想是,先假定所有的数都是质数,然后从2开始依次筛掉素数的倍数的数。 7/23/202225const int Max = 100;bool bpMax + 1; /记录每个数是否是素数int p30; /记录筛选出来的素数int pCnt; /记录当前筛选出来的素数个数void sievePrime()int i, j;memset(bp, true, sizeof(bp);bp0 = bp1 = false;for (i = 2; i = Max; i+)if (bpi) /i是素数 ppCnt+ = i; for (j = i * i; j = Max; j += i

12、) /依次筛掉i的倍数bpj = false;7/23/2022262、线性筛素数 线性筛素数算法能够保证每个合数被且仅被其最小素因子筛掉一次。综观整个线性筛素数的代码,和普通筛素数的方法比,只是筛的顺序变了。 7/23/202227const int Max = 100;bool bpMax + 1; /记录每个数是否是素数int p30; /记录筛选出来的素数int pCnt; /记录当前筛选出来的素数个数void sievePrime()int i, j;memset(bp, true, sizeof(bp);bp0 = bp1 = false;for (i = 2; i = Max;

13、i+)if (bpi) ppCnt+ = i;for (j = 0; j pCnt & i * pj = Max; j+)bpi * pj = false;if (i % pj = 0) break;7/23/202228课后练习:Number Sequence链接地址:Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2) mod 7.Given A, B, and n, you are to calculate the value of f(n).Input 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论