![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM_数论
文章平均质量分 56
数论基础的还是需要好好学习,复杂的emmm建议知道是干嘛的。
I_have_a_world
这个作者很懒,什么都没留下…
展开
-
Trailing Zeroes (III) LightOJ - 1138 (阶乘后面0的个数+二分答案)
传送门题意:T(<=10000)组样例,每组样例一个数p(<=1e8),求最小的n满足n!的后面恰好有p个0,如果不存在,就输出"impossible"题解:每遇到5的倍数,会+1个0,每遇到25的倍数,在此前的基础上再+1个0,以此类推。理解以上之后二分即可,时间复杂度很小。代码:#include <bits/stdc++.h>// #define int long long#define read(x) scanf("%d", &x)#define原创 2021-05-19 14:33:13 · 80 阅读 · 0 评论 -
C Looooops POJ - 2115 (深入理解扩欧算法)
传送门题意:多组输入,每组给A,B,C,k(0<=A,B,C<2^k)。求出statement运行了多少次?注意variable对2^k取余。题解:转化为已有知识,=>,解最小的非负数x。注意事项:注意B=A的时候答案直接为0 如果a==0,b==0,exgcd那应该是没有解的,返回-1。好在这里不可能b=2^k=0。 这里c,2^k都为非负数,c=B-A如果小于0,那就先f=-1,然后解a*x+b*y=-c的最小的非负数解,然后后mod_x-x即为a*x原创 2021-05-25 14:20:18 · 106 阅读 · 0 评论 -
数论基础总结
目录前言参考博客专题训练素数筛埃氏筛(拓展性很强)欧拉筛(线性筛)欧拉函数欧拉函数的定义欧拉函数的一些性质欧拉函数模板(单个&线性)欧拉定理扩展欧拉定理欧拉常数(貌似和欧拉函数没多大关系来着??)唯一分解定理应用1:求所有因数的个数应用2:求所有因数之和应用3:求LCM/GCD扩展欧几里得算法模板:拓展欧几里得&拓展欧几里得求逆元洛谷P1516 青蛙的约会(数论同余、扩欧)(现在我们只需要关注ax+by+c=0怎么解得x,y即可!!!)乘法逆元(3种方法)!!!一个数a与模数mod互质的时候原创 2021-11-13 12:08:25 · 539 阅读 · 0 评论 -
Aladdin and the Flying Carpet LightOJ - 1341 (唯一分解定理+线筛+一个数的因数个数)
传送门题意:给两个数a,b,a为某个长方形的面积(不能为正方形),求长和宽都不小于b且面积为a的长方形的个数。1 ≤ b ≤ a ≤ 1e12 多组输入T<=4000题解:唯一分解定理求a的因数个数,然后除2取整(懂的都懂,另外如果存在sqrt(a)*sqrt(a)=a,也是这样,不用特意考虑,所以count部分完全模板)。然后cnt暴力计数小于b的数是否a%i==0(这里注意可能3*4=a=12,b=5,会记录两次,但是不用考虑,可以直接特判b*b>=a 返回答案0,懂的都原创 2021-05-18 20:18:07 · 151 阅读 · 0 评论 -
Code Feat UVA - 11754 (中国剩余定理+从小到大!!!暴力枚举)
传送门题意:多组输入,知道输入0 0结束。每组样例由C S开始,表示C个约束,要求输出前S小的同时满足C个约束条件的正整数N(中国剩余定理⚠先)。每个约束的组成——xi ki ki和yij,约束——N%xi一定在集合{y[i][1],y[i][2],...,y[i][ki]}中。1<=C<=9,1<=S<=10,2<=x<2^31,1<=k<=100,0<=y1,y2,...,yk<x题解:两种方法:方法一:枚举余数,使用原创 2021-05-20 20:25:13 · 181 阅读 · 0 评论 -
Fantasy of a Summation LightOJ - 1213 (等概率事件+排列组合+快速幂)
传送门题意:T(<=100)组样例,一个长度为n(1<=n<=1000)的数组,k层循环,mod为模。求这k层循环的总和的模(具体看上面代码的第16行)。题解:分析出现数字的总个数,k*n^k,其中每个数字出现的次数相等,即k*n^k/n次,所以答案为sum*k*n*(k-1)。代码:#include <bits/stdc++.h>#define int long long#define read(x) scanf("%lld", &原创 2021-05-20 08:47:03 · 86 阅读 · 0 评论 -
牛客D 动态序列(数组全乘/加,前/后插入数,查询某个值,线段树)
题目:https://ac.nowcoder.com/acm/contest/13504/D题解:1)同时维护区间加法和乘法:乘--mul*=x,add*=x(这里,很好理解,就怕易忘);加--add+=x2)前/后插入,(ai*mul+add)%mod为一个数的最终值,插入一个数aj使满足(aj*mul+add)%mod=x。aj=(x-add+mod)%mod*inv(mul)%mod即可.很厉害!!!代码:#include<bits/stdc++.h>#defi原创 2021-03-29 21:38:10 · 80 阅读 · 0 评论 -
cf1450 C2. Errich-Tac-Toe (Hard Version)(数学,思维,字符串)
题目链接:https://codeforces.ml/contest/1450/problem/C2题意:给定一个长度为n(n<=300)的字符正方形,'.' , 'X' , 'O'。'X'可以与'O'互换,cnt为'X'与'O'的个数和,请改变x个不为 '.' 的保证字符,其中x<=cnt/3下取整,使不出现任意三个连续的字符为'O'或’X'。保证一定存在这样的操作。题解:分别统计t=(i+j)%3的位置的‘X',与'O'数。x0,x1,x2,o1,o2,o3分别对应t值'X'或'O'原创 2020-12-11 21:16:52 · 201 阅读 · 0 评论 -
莫比乌斯反演&整数分块
目录前言参考资料莫比乌斯反演预备知识:整数分块(感觉就是一个思想)总结莫比乌斯函数μ\muμ(数论函数也可以视作一个数列)总结莫比乌斯反演题目训练前言参考资料peng-ym-莫比乌斯反演莫比乌斯反演预备知识:整数分块(感觉就是一个思想)参考博客:peng-ym-整除分块总结一般形式:∑i=1n[n/i]\sum_{i=1}^{n}[n/i]∑i=1n[n/i]过程:r=n/(n/l),然后不断枚举l,求得r,[l,r]部分的值是一样的,不必遍历,直接得到长度*数。复杂度:由转载 2021-09-17 14:51:49 · 186 阅读 · 0 评论 -
Pairs Forming LCM LightOJ - 1236 (唯一分解定理的应用+线筛+MLE的情况)
传送门题意:给一个数n(1<=n<=1e14),求满足lcm(i,j)==n&&1<=i<=n&&i<=j<=n的个数。多组输入,T<=200题解:所以可以将n唯一分解,然后找到每个p的最大质数mx(最多可以分解成多少个p)。然后每个质数贡献2*mx+1(不考虑j>=i这个条件,最后处理一下即可)。理解比如n=12中p=2的mx=3,它的组合可能为2 0,2,1,2 2,1 2,0 2。比如12=2^2原创 2021-05-18 20:04:19 · 104 阅读 · 0 评论 -
luogu P1249 最大乘积(高精,python)
链接:https://www.luogu.com.cn/problem/P1249题意:将一个数拆分成多个不同的数,怎样拆是乘积最大题解:见代码,暑假实习替代做过。现在python水一发(python学着还是有点用,语法不会问大佬)代码(极随意的马蜂):import mathn=int(input())sum=0p=0a=[]for i in range(2,10000): a.append(i) p=i sum+=i if sum+i+1>原创 2020-10-14 22:01:27 · 289 阅读 · 0 评论 -
2019四川省赛 J. Jump on Axis(排列组合+乘法逆元+暴力yyds)
传送门题意:最开始在0,要跳到M。(M<=1e7)每次可以选择1,2,3中的一个数。如果选的数之前没选,就跳那么多步,否则第i次选j的话就跳3*(i-1)+j步。输出y,z。y表示最少多少步能跳到M,z表示跳到M的不同跳法总数(mod1e9+7)。多组输入(T<=200)题解:选1,2,3的次数分别设为i,j,k。可以求出i最大为2583,那么枚举i,j可以直接得到k的个数,每次更新y=min(y,i+j+k),z即可。z咋更新。视作i+j+k种选i个数安排1,然后选j...原创 2021-05-18 13:23:42 · 406 阅读 · 0 评论 -
牛客 巨阵(蛇形输入+思维)
题目链接:https://ac.nowcoder.com/acm/contest/8051/E题意:给定一个数n(<=1000).输出一个数sum和一个n*n矩阵。矩阵元素包含1~n*n不重复,sum为对(矩阵中相邻四个元素以某一元素为起点顺时针递增)的计数。要求sum最大,并输出相应n*n矩阵。题解:很明显应该是一道思维题,规律题,理解了不会很难的那种。然后先盲猜1为中心往外绕,后发现先输入第一行再蛇形输入更小,于是实现,然鹅还是错了。最后也差不多放弃了emmm比赛结束之后,看别人的原创 2020-10-16 22:45:25 · 119 阅读 · 0 评论 -
洛谷P1516 青蛙的约会(数论同余、扩欧)
之前遇到可以套用的模板直接就拿来用了,然鹅半年多了,水平还是这样差。所以争取对那些重要的只是都理解下来。今天看了一下午,研究这个题,终于还是理解的比较透彻了,虽然时间花的有点多,但是收获仿佛更大。题意:emmmmmmmmmmmmmm,很简单求最小整数k使(n-m)*kx-y (mod l);//还要满足n,m,k,x,y,l都是整数分析:貌似这种同余都可以化成解方程的形式。=>(n-m)*k+z*l=x-y(zZ);令a*x+b*y=c,即a=n-m,x=k,b=l,y=z,c=x-y。扩原创 2020-07-10 21:41:37 · 251 阅读 · 0 评论 -
Help Hanzo LightOJ - 1197 (RE的情况(超int范围使数组越界)+大数区间素数筛选(求a,b区间内的素数个数))
传送门题意:T<=200组样例,每组样例给两个数a,b(1<=a<=b<=2^31),求[a,b]内的素数个数。题解:线筛1e5内的数,然后再像埃氏筛一样筛a,b内的数。补充:一直RE不知道咋回事,改成long long莫名过了。RE的情况是程序运行到一半崩溃了,要么/0,要么数组越界。这里应该是数组越界了,可能j>r,又因为j>2^31(int 最多到2^31)变成小数了emmm,然后调用vis[j-l]就数组越界了!!!!!!!!!!!!!(匹夫原创 2021-05-20 10:43:21 · 117 阅读 · 0 评论 -
Maximum GCD UVA - 11827 (最大公约数+输入处理gets)
传送门题意:n(1<n<100)组样例,每组样例输入一行m(1<m<100,未知)个数,求任意两个不同的数(ai,aj,i!=j)的最大公因数的最大值题解:直接暴力,输入需要注意。使用了gets。代码:#include <bits/stdc++.h>#define int long long#define dbg(x) cout << #x << "===" << x << endl#原创 2021-05-23 20:53:16 · 89 阅读 · 0 评论 -
GCD - Extreme (II) UVA - 11426 (欧拉函数+一个数与所有小于它的数的gcd的和)
传送门题意:给定2<=n<=4e6,求G题解:UVA11426 GCD - Extreme (II) 欧拉函数应用先求一个数与所有小于它的数的gcd的和 然后就是求前缀和的问题了求一个数与所有小于它的数的gcd的和:具体实现见代码如(所有除开自己的因数)。注意最需要理解的是(抓住这个数是因数d的x/d倍数就ok了,gcd答案为d的数自然有phi(x/d)个,因为d*y,如果gcd(y,x/d)互质,gcd(d*y,x)才为d,刚好和求x/d的欧拉..原创 2021-05-27 15:33:17 · 104 阅读 · 0 评论 -
Goldbach‘s Conjecture LightOJ - 1259 (验证哥德巴赫猜想+素数筛+暴力+素数个数的公式)
传送门题意:T(<=300)组样例,每组样例给一个数偶数n(4<=n<=1e7),求出满足a+b=n;a<=b;a,b均为素数这三个条件的(a,b)组数。题解:不要想那么难(首先想暴力做法,能暴力就暴力),素数筛之后5e6内素数不超过4e5,样例组数不超300,所以时间复杂度不超过O(300*4e5=1.2e8),时限为两秒,比较稳。补充:x的素数个数估计。参考资料素数个数求解与素数的判定代码:#include <bits/stdc++.h&.原创 2021-05-19 13:43:58 · 118 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题十四:数论基础
[kuangbin带你飞]专题1-23 写在前面1.目前还没啥写的。开始时间:2021-05-13(其实博客上看得到该博客创建时间的)2.上一个专题刷的是网络流(博客总结),属于第一次接触。本来想的是一周特别高效,然后一周略划水,结果是五一期间高效,工作日有课略划水。还好,每个题都写了博客,收获很多3.这个专题,我想应该每个题都涉及了不一样的知识吧。也建议每个题都写博客4.写个感受?有与高四刷书的感觉了,激动,期待,轻松辛苦,有时候一本书要一个月才刷完,这不代表我效率低,只能代表这.原创 2021-05-13 14:54:16 · 343 阅读 · 0 评论 -
Harmonic Number (II) LightOJ - 1245 (求n/1+n/2+n/3+...+n/n+暴力)
传送门题意:T(<=1000)组样例,每组样例一个整数n(1<=n<=2^31)。求n/1+n/2+n/3+...+n/n。题解:通过分析一个数 i出现的次数为为 (n/i-n/(i+1))次,也容易理解 a=n/i 对应n/x的答案为 i 的最大的值,b=n/(i+1) 对应答案为 i+1 的最大的值。所以答案为 i 的数的个数。特别的,如果a==b,那就表示没有答案为 i 的数,比如100/13=100/14=7,那么不可能出现 100/x=13的x。所以有一种方..原创 2021-05-19 21:59:07 · 404 阅读 · 0 评论 -
Death to Binary? POJ - 2116 (A+B,模拟,训练比赛化)
传送门题意:多组输入,每组输入两个01串表示的数a,b。要求表示a+b=c。a,b之多40位 Fibonacci进制:。从低位到高位,权值分别为1,2,3,5,8,13,,,,,, 题解:就是个模拟a+b。这种模拟题要注意,一半很容易出先小错误。特别注意:a,b可能等于"0"。收获:训练比赛化——做题的时候不用太考虑每一步骤是怎么出来的,AC算完事儿。之后再来总结。代码:#include <cstdio>#include <cstrin...原创 2021-05-25 19:37:35 · 70 阅读 · 0 评论 -
Emoogle Grid UVA - 11916 (BSGS算法,a^x+by=c求x)
传送门题意:m*n的格子,可以涂k中颜色,有b个格子不能涂色,给定n,k,b,r,其中r表示涂法种数对1e8+7取余的结果。求最小的m使涂法种数对1e8+7取余答案为r。1<=m,n<=1e8,2<=k<=1e8,0<=b<=500题解:每一竖单独考虑,排列问题。给出的b个点的最小横坐标为mx,那么m最小答案为mx,先求出种类数sum在m=mx的时候是否取余的r;然后再m+1;最后再求在m+1行的基础上至少再加多少行可以满足条件(转化为求x的问题)原创 2021-05-27 16:20:53 · 149 阅读 · 0 评论 -
Leading and Trailing LightOJ - 1282 (数学+n^k的前三位和后三位+STL中的log与pow)
传送门题意:T(<=1000)组样例,每组样例给n,k。求n^k的前三位和后三位。题解:后三位很容易。讨论后三位其中a为整数部分,i为小数部分,即为所求答案,再次不赘述。总结:STL中的log与powAC代码:#include <bits/stdc++.h>#define int long long#define read(x) scanf("%lld", &x)#define print(a, c) printf("%lld%c原创 2021-05-18 22:19:14 · 150 阅读 · 0 评论 -
The equation SGU - 106 (解二元一次不定式方程+扩展欧几里得算法+数学知识)
传送门题意:ax+by+c=0。给定a,b,c,x1,x2,y1,y2,求满足ax+by+c=0&x1<=x<=x2&y1<=y<=y2&x,y都为整数的(x,y)对数。题解:讨论a==0&&b==0,a==0&&b!=0,a!=0&&b==0,a!=0&&b!=0。前面三种都很简单,只是要注意by=c的时候需要c%b==0才有解,难的是第四种(其实相通了也不难)。 首先接触特原创 2021-05-23 20:24:28 · 178 阅读 · 0 评论 -
Farey Sequence POJ - 2478 (欧拉函数+模板+前缀和)
传送门题意:Fn中的项数为1<=i<j<=n且gcd(i,j)=1的(i,j)对数。2<=n<=1e6题解:显然,可以用欧拉函数的前缀和来解决。比如n=5,那么j=5时有phi[5]=4个i满足条件j=4有phi[4]=2个i满足条件j=3有phi[3]=2个i满足条件j=2有phi[2]=1个i满足条件j=1有phi[1]=1个i满足条件(注意这里时错误的,因为不能i=j)所以F5=4+2+2+1=9代码:#include &原创 2021-05-22 09:48:19 · 72 阅读 · 0 评论 -
刷题计划一:概率&期望&统计
前言不一定非要跟kuangbin大大的题单的,遇到想要学的东西,也可以自己去找题,去深入。洛谷题单官方题单8题:【数学2-3】概率与统计大佬题单:xzy的概率期望题单题目1.洛谷官方题单传送门:官方题单8题:【数学2-3】概率与统计1. P3802 小魔女帕琪P3802 小魔女帕琪2.P1297 [国家集训队]单选错位P1297 [国家集训队]单选错位3.P1654 OSU!P1654 OSU!4.P1850 [NOIP2016 提高组] 换教室P18原创 2021-08-01 17:04:45 · 183 阅读 · 0 评论 -
数论学习&总结(只能说是初级)
1.专题传送门:[kuangbin带你飞]专题1-23 2.不知道这个专题涉及了多少知识,主要是想找个机会好好学习一下各种知识。多阅读些东西,决定学些什么东西:【已更新】《算法竞赛中的初等数论》(ACM / OI / MO)前言、后记、目录索引(十五万字符的数论书)、oi-wiki数学部分ps:竟不知道繁凡さん大佬数论也学了那么多知识了,蓝桥杯差了点可能只是某些知识有点欠缺。tql,只能争取我的学习效率能不断增强。有的人仰望就够了,他的成就与你无关。我想从他那里得到的,不过是勇气和动力罢了.原创 2021-05-13 15:17:26 · 593 阅读 · 0 评论 -
牛客#广义肥波# 数论,欧拉降幂
题目链接:https://ac.nowcoder.com/acm/contest/10507/A题意:给定a,b,m,n求m^f[n].其中f[1]=f[2]=1,f[n]=a*f[n-1]+b*f[n-2](n>=3)。题解:【小知识】欧拉降幂:a^k%mod=a^(k%(mod-1))代码: read(a),read(b),read(m),read(n); x[1]=x[2]=1; rep(i,3,n) x[i]=(a*x[i-1]+b*x[i原创 2021-01-02 23:31:44 · 187 阅读 · 0 评论 -
The Super Powers UVA - 11752 (超级数+ceil的使用+unsigned long long的使用)
传送门题意:如果一个数可以写成两个不同的数的幂,而且这个幂都不为1,那么我们称这个数为超级数。比如64=2^6=4^3。现在要求输出所有1~64的超级数。题解:经分析,所有ai^pi&pi为大于等于4的合数都为超级数,比如pi=6可以分解为2,3,那么ai^6=(ai^2)^3。注意1也满足条件。另外,我们不需要提前筛选ai,暴力2~1e5即可。时间复杂度不超过1e5*64。补充:注意判断a*i是否超过2^64-1是最重要的步骤1.unsigned long long:原创 2021-05-23 15:52:56 · 147 阅读 · 0 评论 -
Bi-shoe and Phi-shoe LightOJ - 1370 (线性筛+欧拉函数)
传送门(发现根本不用注册LightOJ)题意:给定一个数组a,长度为n。bi的欧拉函数满足大于等于ai,求最小的bi的和。ai<=1e6题解:线性筛之后直接暴力(加了个记忆化数组,应该会省一点时间复杂度),遇到大于i的素数一定满足条件,1e6+3为素数代码:#include <bits/stdc++.h>#define int long long#define read(x) scanf("%lld", &x)#define print(a, c原创 2021-05-14 09:51:38 · 116 阅读 · 0 评论 -
Prime Time UVA - 10200 (先加eps再四舍五入输出/精度问题+前缀和)
传送门题意:给定a,b(0<=a<=b<=10000),求a,b区间中任意一个数使n*n+n+41为素数的概率。题解:直接打表前缀和代码:#include <bits/stdc++.h>// #define int long long#define read(x) scanf("%d", &x)#define print(a, c) printf("%d%c", a, c)#define dbg(x) cout << #x原创 2021-05-22 09:20:01 · 75 阅读 · 0 评论