![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lightoj数论专题
knownothing
这个作者很懒,什么都没留下…
展开
-
lightoj 1035 Intelligent Factorial Factorization 因式分解
题意:因式分解n!。题解:n很小,#include #include #include #include #include using namespace std;const int maxn=101;int vis[maxn],t,prime[maxn];int c[maxn][maxn],ans[maxn];void init(){ in原创 2013-10-20 13:14:37 · 855 阅读 · 0 评论 -
lightoj 1077 - How Many Points? 最大公约数
题意:求一线段上整数点的个数,整数点(x,y),x和y均为整数。题解:一段线段(x1,y1)(x2,y2)上的整数点个数为gcd(abs(x2-x1),abs(y2-y1))+1;这个可以通过相似三角形来证明。这题只需要注意下超int就OK了。#include #include #include #include #include using namespace st原创 2013-10-22 16:28:18 · 1137 阅读 · 0 评论 -
lightoj 1054 - Efficient Pseudo Code 求所有n^m的所有因子和
题意:求n^m的所有因子和。题解:我们需要先知道,一个数X=p1^t1*p2^t2*...*pk^tk(pi为素数),还需要知道X的所有因子和sum(X)=(p1^0+p1^1+...+p1^t1)*...*(pk^0+pk^1+...+pk^tk)。证明略,以前证明过,可以自己在我其他文中找下,好像那题跟这题一样,就是因子都是排列组合ti得到的。所以结果就很简单了,n^m=p1^(t1*m)原创 2013-10-22 14:13:59 · 1131 阅读 · 2 评论 -
lightoj 1045 - Digits of Factorial 取对数
题意:求n!的长度。题解:我们需要知道log10(n)=a+b(a是整数,b是小于1的小数)。则a是n在十进制下的长度-1。为什么?根据性质就可以推出来,10^(a+b)=10^a*10^b,10^b必定小于10,大于等于1。接下来就简单,log(2,10)=log10/log2。所以p=log(n!)/log(base)=(log(1)+log(2)+...+log(n))/log(base原创 2013-10-22 13:17:15 · 1163 阅读 · 0 评论 -
lightoj 1067 - Combinations 组合数取模
题意:求组合数C(n,k)%mod,mod=1e6+3;题解:看别人都是lucas定理来解的,怎么看怎么不会用到这题上。。我自己暴力了。用sum[i]记录1*2*...*i%mod。pows[i]记录pow_mod(1,mod-2)*...*pow_mod(i,mod-2)。pow_mod(b,mod-2)为b的逆元,可用费马定理来证明。从而得出a/b%mod=a*b^(mod-2)%mod。原创 2013-10-22 15:50:08 · 1292 阅读 · 0 评论 -
lightoj 1007 - Mathematically Hard 欧拉函数
题意:求[a,b]范围内所有整数的欧拉函数的平方和。欧拉函数:求不大于其本身的与其互质的数的个数。题解:预处理,欧拉函数筛选下,之后保存前n项和,sum[n]。答案就是ans=sum[b]-sum[a-1]。注意:1.之后结果很大,需要用无符号64位整数,unsigned long long。lightoj好像不能用__int64。2.内存足,开两个5e6的数组会爆内存,所以前n项原创 2013-10-20 14:13:37 · 1190 阅读 · 0 评论 -
lightoj 1028 - Trailing Zeroes (I) 欧拉函数
题意:求一个数n,有多少种进制表示方法,使得末尾为0.例子:9=(30)三进制题解:我们知道二进制(1101)=1*2^0+0*2^1+1*2^2+1*2^3=13。转换成n进制之后,若末尾为0。则原十进制数必定被n整除。相对应的当一个数是n的倍数的时候,必定能转换成末尾为0的n进制。所以该题就是求输入数的约数个数。求下欧拉函数就好。注意:由于输入的数很大n=10^12,且测试数据很多T=原创 2013-10-20 15:55:16 · 1498 阅读 · 0 评论 -
lightoj 1109 - False Ordering 因式分解+排序
#include #include #include #include #include using namespace std;const int maxn=1010;int c[maxn];struct node{ int x,w; }e[maxn];int cmp(node a,node b){ if(a.w==b.w)return a.x>b.x;原创 2013-10-20 13:32:31 · 1018 阅读 · 0 评论 -
lightoj 1098 - A New Function 因子和
题意:求1~n的所有因子和,其中因子不包括数的的本身和1。题解:鄙视下自己先,太菜了。。我们知道,枚举1~sqrt(n),我们可以找出一个数所有的因子。所以我们用同样的方法枚举1~sqrt(n),又对于有同一因子i的所有数,它的另一个对应因子n/i成等差数列,等差数列求和即可。又避免重复,我们需要定义另一个因子从i+1开始。#include #include #in原创 2013-11-09 12:30:15 · 1702 阅读 · 0 评论