- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM程序设计–计算简单题
列出完数 题目分析 参考源代码 参考源代码 对称三位数素数 题目分析 参考源代码 参考源代码 五位以内的对称素数 题目分析 参考源代码 参考源代码 参考源代码 An easy problem Time Limit: 6000/3000 MS (Java/Others)??? ?Memory Limit: 32768/32768 K (Java/Others) Problem Description When Teddy was a child , he was always thinking about some simple math problems ,such as “What it’s 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 answer when N was less than 10…but 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 ? Input The first line contain a T(T = 2000) . followed by T lines ,each line contain an integer N (0=N = ). ?Output For each case, output the number of ways in one line. Sample input: 2 1 3 Sample output: 0 1 题目分析: 思路1: 将等式变形为 N + 1 = (i + 1) * (j + 1),由于i = j,只需要枚举i (枚举范围从1到 ),然后判断是否满足,直接计数即可。 思路2: 同样将等式变形N + 1 = (i + 1) * (j + 1)。只需要求出N + 1的约数个数,然后分情况处理即可。令N + 1的约数个数为f[N + 1] 1. 当N + 1为完全平方数时,ans = (f[N + 1] – 2 + 1) / 2 公式可以理解成:所有的约数,去掉1和本身之后(减2),剩下的可以对称的组成一对一对的答案。 2. 当N +1非完全平方数,同理可得, ans = (f[N + 1] – 2) / 2 。 如何快速的求一个数N的约数个数 我们知道,任何一个自然数N可以表示成其质因数的幂的乘积的形式. 1、简单的筛素数 其思想是,先假定所有的数都是素数,然后从2开始依次筛掉素数的倍数的数。 const int Max = 100000; bool bp[Max + 1]; //记录每个数是否是素数 int p[30000]; //记录筛选出来的素数 int pCnt=0; //记录当前筛选出来的素数个数 void sievePrime() { int i, j; memset(bp, true, sizeof(bp)); bp[0] = bp[1] = false; for (i = 2; i = Max; i++) { if (bp[i]) //i是素数 { p[pCnt++] = i; for (j = i + i; j = Max; j += i) //依次筛掉i的倍数 bp[j] = false; } } } * * 简单计算题 ACM程序设计 题目内容 自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来。所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6是完数,因为6=1+2+3。而24不是完数,因为 24
文档评论(0)