这个专题基本结束,但感觉数论就做这点题还远远不够,知识点有好多,当然数学也还远远不够。虽然是数学系的学生,但还是为自己的菜感到担忧。。。这半周继续水了几道题,但水到了几道好题,必须好好整理一下。
O题:给出mod和n个数(a1,a2,a3,...),让计算(a1^a2^a3^...an)%mod。
A^x % m = A^(x%phi(m)+phi(m)) % m (x >= phi(m))。。。小本本记下来。
这个题说实话我完全推不出来,于是手动发现了一个特方便的公式A^x % m = A^(x%phi(m)+phi(m)) % m (x >= phi(m))。关于这个公式的证明我找遍了网络也找不到了(关于这部分证明的网页丢失了)。估计只能去求助数学老师了。有这个公式以后就非常容易了,递归逐层求出来。
关于公式是如何由欧拉定理推出来的,明天去问问数分老师,下次博客把证明总结下。。。。。。
D题:就是给一个数x,找出若x是k进制数,那么将x转化为十进制后取根号是整数的情况,求k最小是多少。
因为题目中说数(十进制下)<=10^9,且转换进制k<100,所以就可以暴力求了。水题,就是题目不好懂。
Y题:给出两个数n,m,求1到n!之内有多少个数可以被m!整除。
定理:若两正整数x与y互质,那么x%y与y也互质(x>y)。。。小本本记下来
因为n>m,所以n!一定是m!的整数倍。又因为上面的定理,所以只要求出1到m!有多少与m!互质的数在乘n!/m!就求出来了。
求出1到m!有多少与m!互质。(递推处理)
设f( i )表示phi( i! )( i! 的欧拉函数),因为阶乘的特殊性质得 1,若 i 是质数 f( i )=f( i-1 )*(i-1)。2,若 i 不是质数,f(i)=f(i-1)*i。
这样就求出来了。。这确实是一道好题。。。值得回味。
G题:先给出斐波那契数列1,2,3,5,8,13,21,34,55,,,,,,给出两个01序列,如10100表示0*1+0*2+1*3+0*5+1*8。
给出两个这样的01序列,将它按上述方式转化为十进制后加和在用上述方式转回去,变成01序列输出。
这个题其实就是推规律,不怎么难,因为是斐波那契数列。先将两数列按位置加起来。1,当有相邻两位置都是1,假如f[ i ]=1=f[ i+1 ]=1,那么f[ i+1 ]=f[ i ]=0,f[ i+2 ]++。2,假如i位置是>1,f[i+1]++,f[i-2]++,f[i]-=2。因为当对后面操作时会影响到前面的,所以就要构造一个循环,不停的来回处理,直到两种情况都没有了以后结束,输出。
P题:给出n种硬币的厚度(硬币无限用),给出m张桌子的高度。要求从n种硬币选4种组成桌子腿(同种硬币一条腿),求能组成每种桌子高度中<=high且最大,和>=h且最小的两个高度。
数据量很小最多50张桌子,暴力就可以解出来,其实就是在n种硬币中选4个,求出这四种硬币的最小公倍数,然后求最值就可以了。水题一道,看懂题意就做得出。
感觉下次博客要做一个数论的小结,整理下收获的知识点与数学启发。 不得不说数学确实比较有意思。