LightOJ数论题单及简易题解

来源:互联网 发布:软考初级程序员考什么 编辑:程序博客网 时间:2024/04/28 07:07
1007 计算前n个数的欧拉函数的平方的和,递推计算欧拉函数,并利用树状数组,注意2 5000000这组数据要unsigned long long才能存下
1014 计算P-L的因子中大于L的数的个数,从1到65535分别对P-L进行试除,同时储存除数和商,然后输出大于L的数即可
1024 计算最大公倍数,每个数需要素数展开,然后取最高次幂,结果需要大数,大概有4000位,写不好的话会T
1028 计算N的因子的个数-1,水题,打个素数表然后试除即可
1035 计算N的素数分解式,N最大才100,注意输出格式,水
1045 计算N!在K进制下的位数,即计算log(1)+log(2)+...+log(N)其中log的底数都是K,beginner的题
1054 计算n^m的所有因子的和模1000000007,求n的素数分解式,对每个素数的幂乘以m,然后由有一个数的所有因子和函数是积性函数得出所有因子的和为∏(p^am-1)/(p-1)
1077 计算网格上起始都是整点的线段经过的整点的个数,答案为1+gcd(abs(x1-x2),abs(y1-y2)),这题相当水
1090 计算(nCr)*(p^q)的末尾0的个数,分别计算2和5的幂,输出小的
1098 即计算(1<=i<=n)∑i([n/i]-1),可转换为根号N的(我真是弱爆了,看了别人的代码,研究半天才想明白)。
1138 给出N!末尾0的个数X,计算N,无解输出impossible。考虑把原数转化为5进制,找出X和这个5进制数的关系,即可得解
1163 给出A-B,其中B=A/10,计算A的可能值。A=(A-B)*10/9如果(A-B)%9==0则多输出一个(A-B)*10/9-1。
1197 求a,b(1<=a<=b<2^31,b-a<=100000)间的素数个数,求65535内的素数,然后对[a,b]区间筛选一下就行了
1213 分析一个循环语句,得出答案为K*N^(K-1)*∏A % MOD
1214 判断一个数能不能整除另一个数,大数运算。
1215 给出A,B,LCM(A,B,C)<10^12。求C,如果无解输出impossible。思路很简单写起来略麻烦
1220 给出x,计算满足x=b^p中最大的p。其中x的绝对值不小于2不大于32bit整数,求x的素数分解式,找幂的最大公约数,如果x是负数,那么答案是这个最大公约数的最大奇因子
1234 计算(1<=i<=n)∑1/i。n<=1e8。开不了1e8的数组,将1e8分组为1e5计算即可。(综合考虑时间复杂度和空间复杂度,水题)
1236 计算最大公倍数等于n的数的对数。(a,b),(b,a)算一对。求素数分解式,若bi是第i个素数的幂,那么对于这两个数中有一个的幂一定是bi,另一个随意,那么对于第i的素数的分配方案有(2*bi+1)种(即假设第一个数的幂是bi,另一个数的幂可以为0~bi共bi+1种;另一方面假设第二个数是bi,同理第一个数的幂的选择有bi+1种,这里排除幂都是bi的情况,对于某个素数pi,这两个数的幂的选择方案有2*bi+1种)。那么对于所有素数,共有∏(2*bi+1)种分配方案,由于要排除(a,b),(b,a)这种情况,在之前的计算中除了两个数都是n这种情况都有重复,答案则应该是(∏(2*bi+1)+1)/2
1245 计算(1<=i<=n)∑[n/i],这题可以参考forum
1259 入门题
1278 计算把N拆分成连续整数和的拆分数,要求拆分成至少两个数。即求N奇数因子的个数,pollard rho即可。
1282 求N^K(2<=N<2^31,0<k<=10^7)的前3位和后3位,后三位就不说了,前三位用double一直保留前三位就能乱搞过去。

1289 计算1~N的最小公倍数,N<=1e8,时限4s,内存64MB。先筛出N内的素数(这里容易爆内存),然后容易推得若i是以素数p为底的数,则lcm[i]=lcm[i-1]*p,否则lcd[i]=lcm[i-1],lcm[1]=1,由此可以预处理一下就能达到时限,但要注意内存限制。

1318 很容易列出答案的公式,答案是对N取模+1以下省略,当M=0时是K^L,否则K=1时是0,其他情况是(K^L)*C(L,M)*(K-1)^M,计算C(L,M)时可以简单的计算素数p下的L!、M!和(L-M)!的幂,然后相减

1333 将那些blocks排下序就行了,没什么难的

1340 求最大的b,使N!在b进制下的末尾0的个数至少为t,1<=N<=10^5,1<=t<=1000。筛N之内的素数,然后依次看在素数p进制下0的个数t',t'大于t则t'-=t,ans=ans*p%mod

1341 给出两个正整数1<=a<=N<=1e12。问N可以拆成多少对p*q,使得p和q中最小的不小于a,且p!=q。利用pollard rho拆分素因子,然后暴力枚举所有因子,记录因子中大于a,且小于根号N的个数。

1356 二分图的最大独立集。将每个数素因子分解,按每个数素书幂的和的奇偶来分为两部分,显然同一个集合内的两个元素不会是prime independent,对每对prime independent的两个数连边,然后求最大独立集就行了。

1370 给出多个n(1<=n<=1e6),求满足phi(x)>=n的最小的x之和,就是反求欧拉函数。递推计算phi(1)~phi(1e6+5)。利用phi(1)~phi(1e6+5)计算最小的x。

1375 询问∑lcm(i,j)(1<=i<j<=n),n的范围是3e6,case数有2e5。必须预处理答案。经过一番推导可以发现ans[n]-ans[n-1]=∑_(k|n)[n/k]*k*k*phi[k]/2,由此预处理所有答案即可。

0 0
原创粉丝点击