LightOJ数论题目小结
题目
简单题解
LightOJ 1007 Mathematically Hard
因为数据样例比较多,所以进行预处理.至于欧拉函数可以用线性筛选的方法(很棒,牢记!)LightOJ 1014 Ifter Party
题意是求大于某个数的因子,一般用暴力的枚举,效率为 N−−√ ,sort之后输出就好了LightOJ 1024 Eid 求1~N的最小公倍数,可以枚举1~N的素数的幂数,然后乘起来,要用到大数,本来辛辛苦苦敲好了大数然后忘了保存,一怒之下就不敲了
LightOJ 1028 Trailing Zeroes (I)
求N的因子数,假设 N=aq1bq2...zqn ,那么因子数 O(N)=(1+q1)(1+q2)....(1+qn) ,如果 N 特别大的话就预处理一下素数LightOJ 1035 Intelligent Factorial Factorization
很简单的一题,直接写就好了LightOJ 1045 Digits of Factorial
有关位数的问题经常用log来处理,这题也不例外.LightOJ 1067 Combinations
这题我不会,貌似用Lucas定理什么的来做,可惜至今没看懂,于是没敲.LightOJ 1077 How Many Points?
喜闻乐见的水题,只要求GCD就好了LightOJ 1007 How Many Points?
求末尾0无非是找2和5,这个还是很简单的拉LightOJ 1098 A New Function
额,代码很短却很有启示意义的题目,如何不重复的计算,那么我们就约束一定的方法就好了,对于每个素数N ,我们从 N+1 来算就不会重复了LightOJ 1109 False Ordering
又是喜闻乐见的水题,求出因子数再排个序就好了LightOJ 1138 Trailing Zeroes (III)
详细的请看这里LightOJ 1163 Bank Robbery
设 A=10x+y ,那么 A−B=9x+y ,只要枚举 y 就好了LightOJ 1197 Help Hanzo
因为b-a很小,所以我们可以把线性筛选质数的方法运用到指定的区间上LightOJ 1213 Fantasy of a Summation
对于多重for循环里边的变量可以看做组合和排列的问题,然后这题就用快速幂就可以了LightOJ 1214 Large Division
模拟一下手工的除法就好了,额,好像要某个数论的定理什么的也可证明…LightOJ 1215 Finding LCM
如果AB已经达到L中某个质数的最高次幂,那么L就不再需要了就可以除去,不然就保留,貌似有简单的减法,直接GCD就好了,可以我不会………………..LightOJ 1220 Mysterious Bacteria
脑洞开了一下,直接枚举p ,然后再回来验证是否正确…注意附属时候是不可能偶数次幂的LightOJ 1234 Harmonic Number
求调和级数的大小,这里貌似用片取法,很棒的方法LightOJ 1236 Pairs Forming LCM
这也是一道写起来相当容易却相当考验数学思维的题目,建议用唯一分解定理,最后列出表达式,求解LightOJ 1245 Harmonic Number (II)
直接暴力 N−−√ 枚举因子LightOJ 1259 Goldbach`s Conjecture
直接预处理一下,然后暴力验证就好了LightOJ 1278 Sum of Consecutive Integers
列出表达式,然后就会发先这题就是求该数的奇数因子个数就是了,可惜WA了好多次,QAQ.
总结
数论的题目最重要的是数学思维,列出表达式,包括推导结果……(反正我不会)靠智商的东西
欧拉函数可以用线性筛的方法做(尤其用于预处理),而对于相当大的数可以选择预处理素数
求因子暂时只会用 N−−√ 的方法暴力….
因子数比较简单,为 (q1+1)(q2+1)....(qn+1) ,而求因子和也比较简单 aq1+11−1a1−1aq2+12−1a2−1......aqn+1n−1an−1
有关某个数有多少位,前多少位都可以用 log 来解决
for循环什么的可以看做组合问题
末尾0通常是来计算2和5的个数
线性筛选质数可以用到区间上边
在求因数的时候遇到重复的问题可以用 N(N+1) 解决