
数论
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU - 5317
题目链接:HDU - 5317因为一个数不同的素因子不超过logn个,所以答案不会很大。我们枚举每个答案 i ,如果合法,那么就是这个区间的 i 的倍数个数大于1这个东西可以前缀和预处理。并且我们可以算出答案上界为7AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int原创 2020-08-15 14:52:07 · 224 阅读 · 0 评论 -
黑妹的游戏III
题目链接:黑妹的游戏III不难发现,每次除以因子,可以等价于除以质因子。然后我们对每个质因子单独看也是不影响的。然后就变成质因子最多可以抵消多少次了。假设某个质因子总数为sum,最大值为mx,那么如果mx*2<=sum,则会剩下1或者0个(奇偶)。不然就是mx*2-sum个。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long原创 2020-07-26 10:33:25 · 390 阅读 · 2 评论 -
有毒的玻璃球
题目链接:有毒的玻璃球把式子的因子提出来,然后枚举因子,预处理i^k即可。预处理直接sieve一下就好了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e7+10,mod=1e9+7;int pw[N],n,k,vis[N],res;int qmi(int原创 2020-07-22 23:00:49 · 238 阅读 · 0 评论 -
小A的数学题
题目链接:小A的数学题比较naive的莫反题。考虑枚举gcd,然后提出来就ok了。然后gcd=d的形式,我们让区间同时除以d,变成gcd=1的形式做整除分块即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+10,mod=1e9+7;int n,m,u原创 2020-07-22 21:59:34 · 238 阅读 · 0 评论 -
Rinne Loves Sequence
题目链接:Rinne Loves Sequence对于区间互质的数个数我们可以用莫比乌斯反演得到:Σ mu[i] * cnt[i] * (cnt[i]-1) / 2mu[i] 为 i 的莫比乌斯函数,cnt[i] 为 i 出现的次数然后根据删除和添加就可以维护了。f(d) 为 gcd 恰好为 d 的数的对数, F(d) 为 gcd 为 d 的倍数的对数, μ(d) 表示莫比乌斯函数F(d) = ∑ f(n) 其中( n % d == 0 )莫比乌斯反演一下就可以得到, f(d) = ∑ μ(原创 2020-07-22 11:11:38 · 220 阅读 · 0 评论 -
Divisors of the Divisors of An Integer
题目链接:Divisors of the Divisors of An Integer我们直接看每个质因子的贡献即可。假设这个质因子有x个,那么我们构造某一个数的时候可以选0,1,2,3,…,x个,然后对应的因子就有1,2,3,4,5,…,x个。所以每个因子的贡献就是(x+1)*(x+2)/2但是要注意1e7+7不是质数,所以没有逆元,需要在取模之前除以2.然后对于阶乘分解我们可以提前预处理出所有质数。复杂度:O(T*n)AC代码:#pragma GCC optimize("-Ofast原创 2020-07-05 17:14:22 · 382 阅读 · 0 评论 -
Codeforces - Longest Subsequence
题目链接:Codeforces - Longest Subsequence我们考虑每个数字作为LCM的最大值即可。然后对于每个元素,只对他的倍数有贡献。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e6+10;int vis[N],cnt[N],n,m,原创 2020-06-17 21:59:57 · 232 阅读 · 0 评论 -
HDU - 4196
题目链接:HDU - 4196显然我们把1->n当中的每个质数拿出来看次幂,如果是奇数那么我们就要少拿一个,不然全部拿完。复杂度是O(n)的,因为质数个数是n/logn的,然后用勒让德定理求次幂个数是logn的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int m原创 2020-06-04 10:54:45 · 221 阅读 · 0 评论 -
因子和
题目链接:因子和显然可以直接把a唯一分解。然后次幂都乘上b。然后根据唯一分解定理求即可。但是要注意文明等比数列求和的时候,可能(1-q)和mod不互质,不能逆元,我们直接特判即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int mod=9901;int a,b,原创 2020-06-03 23:45:43 · 219 阅读 · 0 评论 -
Factorial
题目链接:Factorial考虑a/b后面0的个数,其实就是除b能整除多少次。所以我们对k的每个因子单独求解即可。然后对每个因子看n的阶乘能整除多少次,就很简单了,直接对每个因子算贡献。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;int n,k,res=1e18; map<i原创 2020-05-19 10:26:22 · 680 阅读 · 0 评论 -
Prime Game
题目链接:Prime Game因为总共的因子个数是nlogn级别的,所以我们考虑每个因子的贡献即可。首先处理出每个数字的质因子。然后对于当前质因子算贡献即可。用总区间值 - 区间没有当前质因子的值。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+10;原创 2020-05-18 21:25:53 · 1240 阅读 · 0 评论 -
多少个1?
题目链接:多少个1?因为m为质数,所以m>6时与10都是互质的,普通bsgs即可。因为m很大,所以乘法会爆long long,需要快速乘,或者__int128,我使用后者。然后式子可以简单化简为:10^x = (9*k+1)%m(同余)所以直接离散对数bsgs即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int __int128usin原创 2020-05-16 12:47:22 · 278 阅读 · 0 评论 -
[Violet]樱花
题目链接:[Violet]樱花我们令 z = n!可得: z(x+y)=xy(x-z)(y-z)=z*z即:a*b=z*z所以我们找到一个合法的a就能对应一个b,合法的a是什么呢?z*z的因子,所以对z*z质因数分解即可,然后调用唯一分解定理我们就能计算出答案了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing原创 2020-05-13 19:33:30 · 327 阅读 · 0 评论 -
智乃与无意义的题目
题目链接:智乃与无意义的题目根据唯一分解定理,显然只需要维护,2,3,5,7,9出现的次数即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+1...原创 2020-05-02 14:28:46 · 241 阅读 · 0 评论 -
Number With The Given Amount Of Divisors
题目链接:Number With The Given Amount Of Divisors根据唯一分解定理,我们可以知道。肯定选小的素数去组合是最优的。然后我们可以爆搜一波。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long lon...原创 2020-04-10 11:38:36 · 279 阅读 · 0 评论 -
[SDOI2015]约数个数和
题目链接:[SDOI2015]约数个数和这道题主要就是这个公式。如果我们知道这个公式了,然后直接反演一下,枚举约数d,预处理除法分块的前缀和即可。然后再对d除法分块。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longu...原创 2020-03-04 10:59:55 · 208 阅读 · 0 评论 -
[HAOI2011]Problem b
题目链接:[HAOI2011]Problem b如果a=1 && c=1 ,那么就是很简单的莫比乌斯反演了。现在不等于,我们可以考虑容斥答案为:calc(b,d)-calc(b,c-1)-calc(a-1,d)+calc(a-1,c-1)AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include&...原创 2020-03-03 20:56:03 · 156 阅读 · 0 评论 -
[POI2007]ZAP-Queries
题目链接:[POI2007]ZAP-Queries式子挺简单的,因为有T组,不能O(n)去计算。于是可以预处理μ的前缀和,反演时把每段n/i的值相等的部分一起算(即分块计算) 可以通过n/(n/i)找到值相等的一段的段末位置AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h&...原创 2020-03-03 20:43:07 · 246 阅读 · 0 评论 -
WD与循环
题目链接:WD与循环如果我们把每个循环的值,当成小球放到喝粥当中,那么其实就是:a[1]+a[2]+a[3]+……+a[n] <=m ,如果是等于m,那么直接就上隔板法 -> C(n+m-1,m-1)现在是小于等于,我们通过组合数的前缀和可以知道,其实就是C(n+m,m)。预处理阶乘,然后Lucas即可。AC代码:#pragma GCC optimize("-Ofas...原创 2020-02-24 11:52:18 · 214 阅读 · 0 评论 -
Codeforces - Trailing Loves (or L'oeufs?)
题目链接:Codeforces - Trailing Loves (or L’oeufs?)其实就是求n的阶乘能整除多少次b。考虑最少整除的次数:就是某个某个b的质因子的限制。我们对b的每个质因子求min即可。然后对于某个质因子,求解一下即可。要注意a很大,如果i*a>n提前退出。不然会爆long longAC代码:#pragma GCC optimize("-Ofast"...原创 2020-02-21 18:06:20 · 267 阅读 · 0 评论 -
Codeforces - Power Tower
题目链接:Codeforces - Power Tower可以注意到欧拉函数下降的速度是很快的,很快就能到1。所以暴力降幂即可。注意快速幂的时候也需要降幂。因为如果快速幂中途出现了>=MOD的情况我们要加上MOD,以满足欧拉降幂的公式。AC:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/s...原创 2020-02-07 20:06:49 · 308 阅读 · 0 评论 -
Codeforces - Math
题目链接:Codeforces - Math题目大意:你个一个数字,你可以乘某个数,或者开平方,求能得到的最小的数和最小次数。先质因数分解后,我们可以发现,每个质因数一定会只被消到只有一个。然后把所有都变成一样的最高质因数次幂,然后一直开方即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bi...原创 2020-01-28 19:27:44 · 299 阅读 · 0 评论 -
Codeforces - Vile Grasshoppers
The weather is fine today and hence it’s high time to climb the nearby pine and enjoy the landscape.The pine’s trunk includes several branches, located one above another and numbered from 2 to y. Som...原创 2020-01-01 15:56:11 · 179 阅读 · 0 评论 -
欧拉降幂
一般对于 a^b%p 的形式当b很大,大到long long都存不小时,就不能直接快速幂了,必须对b取模,但不是直接让b对p取模,为什么呢?因为是错的。这个时候我们怎么办呢?这个时候我们就要用到欧拉降幂了。上面就是欧拉降幂的公式,一般来说,我们使用第三个即可。phi 就是欧拉函数。下面给出求欧拉函数的板子 ll phi(ll n){ ll i,rea=n; fo...原创 2019-06-19 16:25:55 · 1088 阅读 · 0 评论 -
O(1)快速乘
求两个数相乘并取模,但是乘积超过了long long怎么办呢?一般都是快速幂的思想快速乘,时间复杂度为log(n)很快了,这里提供一个更快的O(1)算法inline long long multi(long long x,long long y,long long mod){long long tmp=(x*y-(long long)((long double)x/mod*y+1.0e-8...原创 2019-05-06 18:01:54 · 591 阅读 · 4 评论 -
计算系数
给定一个多项式(ax+by)k,请求出多项式展开后x^n * y^m项的系数。输入格式共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。输出格式输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。数据范围0≤n,m≤k≤1000,n+m=k,0≤a,b≤106输入样例:1 1 3 1 2输出样...原创 2019-04-27 00:26:34 · 736 阅读 · 0 评论 -
同余方程
线性同余方程,也就是给定a,b,m,求一个整数x满足a*x≡b(mod m)a*x≡b(mod m),然后因为ax≡b(mod m)ax≡b(mod m)等价于ax−b是m的倍数,不妨设y为一个负数,那么这个方程可以改写为ax+m*y=b于是 我们可以通过拓展欧几里得算法求出特解,然后(x%b+b)%b(x%b+b)%b来达到最小值的效果.如例题:题目描述求关于x的同余方程ax≡1(mo...原创 2019-04-26 23:57:34 · 923 阅读 · 0 评论 -
斐波那契数列的各自性质
1.f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1。 可以用于斐波那契数列求前缀和,然后在用矩阵快速幂求出答案。 2.f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)。 与上面相似,不过是奇数前缀和。 3.f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1。 与上面相似,不过是偶数前缀和。 4.[f(0)]^2...原创 2019-06-26 19:30:25 · 726 阅读 · 0 评论 -
hdu 2588
看到这道题,首先应该就想到了求因子,但是计算的时候,又会有重复,就很麻烦,所以我们需要素数这个东西。问题所要求的是 gcd( x , n ) > m ,由gcd( x , n )本身可知,gcd求出来的是 x 和n的最大公约数(设为a),即有式子gcd( x ,n )=a , 进一步进行化简可变为gcd( x/a , n/a )=1 , 到了此处这个式子又有了另一层含义——x/a与n/a互...原创 2019-07-09 15:09:21 · 457 阅读 · 3 评论 -
poj 2142
Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she can put one 700mg...原创 2019-07-10 16:17:00 · 488 阅读 · 1 评论 -
错排问题
先给出百度百科的概念:n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。错排数怎么计算呢?n 的错排数我们用 D[n] 来表示:第一步,考虑第n个元素,把它放在某一个位置,比如位置k,一共有n-1种放法;第二步,考虑第k个元素,这时有两种情况:(1)把它放到位置n,那么对于除n以外的n-1个元素,由于第k个元素放到了位置n,所...原创 2019-07-11 09:10:24 · 288 阅读 · 0 评论 -
三分求函数极值
这篇博客是个极其简单的东西。如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减。试求出x的值。输入格式第一行一次包含一个正整数N和两个实数l、r,含义如题目描述所示。第二行包含N+1个实数,从高到低依次表示该N次函数各项的系数。输出格式输出为一行,包含一个实数,即为x的值。四舍五入保留5位小数。输入3 -0.9981 0.51 -...原创 2019-08-08 11:09:06 · 528 阅读 · 0 评论 -
常见的数论基本定理
以下均来自百度百科:(常见的并未列出)四平方和定理: 每个正整数均可表示为4个整数的平方和。狄利克雷定理: 狄利克雷定理说明对于任意互质的正整数a,d,有无限多个质数的形式如a+nd,其中n为正整数,即在等差数列a+d,a+2d,a+3d,…中有无限多个质数——有无限个质数模d同余a。大数定律: 在随机事件的大量重复出现中,往往呈现几乎必然的规律,这个规律就是大数定律。通俗地说,这个定...原创 2019-08-26 20:52:56 · 2888 阅读 · 1 评论 -
[HEOI2015]小Z的房间
题目描述你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路。现在,...原创 2019-09-22 14:20:07 · 219 阅读 · 0 评论 -
卡特兰数
卡特兰数是组合数学中,很经典的一类问题,一般可以解决一下问题n个左括号和n个右括号组成的合法括号序列的数量为 Cat(n);1,2,3,……,n 经过一个栈,形成的合法出栈序列的数量为 Cat(n);n 个节点构成的不同二叉树的数量为 Cat(n);在平面直角坐标系上,每一步只能向上走或向右走,从 (0,0) 走到 (n,n) 并且除两个端点外不接触直线 y = x的路线数量为 2Cat...原创 2019-04-17 23:42:34 · 390 阅读 · 0 评论