数论
文章平均质量分 78
DoIdo~
这个作者很懒,什么都没留下…
展开
-
H . 真签到题
题目链接题目描述Fibonacci 数列,f(n)=f(n−1)+f(n−2)前n项为1 1 2 3 5 8 …给出n,m,需要你计算出满足条件的对数(i,j)的个数,且i<=j。条件是:1<=gcd(f(i),f(j))<=ni,j<=m由于答案可能很大,所以对1e9+7取模输入描述:第一行为一个整数T,表示T组测试数据。接下来共T行,每行为两个整数n,m。1<=T<=1e51<=n<=1e181<=m<=1e原创 2022-03-07 13:46:01 · 359 阅读 · 0 评论 -
牛客 · 奇♂妙拆分
奇♂妙拆分题目描述在遥远的米♂奇♂妙♂妙♂屋里住着一群自然数,他们没事就喜欢拆♂开自己来探♂究。现在他们想知道自己最多能被拆分成多少个不同的自然数,使得这些自然数相乘的值等于被拆分的数。输入描述:第111行输入一个整数TTT,代表有TTT组数据。第2−T+12-T+12−T+1行,每行输入一个整数n,代表需要被拆分的数。数据保证:0<T≤100,0<n≤1090<T≤100,0<n≤10^90<T≤100,0<n≤109。输出描述:输出一共TT原创 2021-04-12 21:41:06 · 202 阅读 · 0 评论 -
欢欢的签到题(数论)
欢欢的签到题题目描述欢欢会给你一个素数ppp,由于欢欢的数论非常菜,所以他想请你帮他计算一下aaa在模ppp下的逆元。输入描述:输入aaa和ppp,用空格隔开输出描述:输出逆元样例1输入3 5输出2提示:1≤a≤p≤1e181≤a≤p≤1e181≤a≤p≤1e18解决思路:提示:数据范围出锅,ppp其实是小于2312^{31}231的,虽然101810^{18}1018也可以做(用龟速乘处理一下会溢出的乘法就行,或者用万能的__int128)。已知原创 2021-03-07 10:12:24 · 359 阅读 · 0 评论 -
牛客——华华给月月出题(快速幂,欧拉筛)
华华给月月出题题目描述华华刚刚帮月月完成了作业。为了展示自己的学习水平之高超,华华还给月月出了一道类似的题:Ans=⊕i=1N(iNmod (109+7))Ans=\oplus_{i=1}^N(i^N\mod(10^9+7))Ans=⊕i=1N(iNmod(109+7))⊕\oplus⊕符号表示异或和,详见样例解释。虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希望你写个程序帮她验证一下。输入描述:输入一个正整数NNN。输出描述:输出答案AnsAnsAn原创 2021-03-02 13:58:27 · 431 阅读 · 7 评论 -
牛客——Diff-prime Pairs(数论,组合数学)
Diff-prime Pairs题目描述Eddy has solved lots of problem involving calculating the number of coprime pairs within some range. This problem can be solved with inclusion-exclusion method. Eddy has implemented it lots of times. Someday, when he encounters anot原创 2021-02-24 13:12:15 · 267 阅读 · 3 评论 -
赛后题解——真假亚瑟王(数论)
注释:多组测试数据卡超时不多的话可以试试这题能否用数组记录,这样有的数据就可以O(1)\small O(1)O(1)时间算出C. 真假亚瑟王题目描述魔术师梅林在水晶球中预见了莫德雷德的叛逆,她决定在在莫德雷德叛逆之前采取一个有效的策略保护亚瑟王。具体做法如下:使用魔法将亚瑟王复制成N份,当然,其中只有一个使真的。她认为这样就能有效的保护亚瑟王不被杀死。为了自己能最终找到亚瑟王,她将所有的亚瑟王按1-N编号,并设定了一个密码数字X。真亚瑟王的编号是最接近N的且不能被2−X中任何一个数整除的数。(即原创 2021-01-25 21:25:01 · 1058 阅读 · 6 评论 -
赛后题解——问题 C: A^X mod P
问题 C: A^X mod P题目描述It’s easy for ACMer to calculate A^X mod P. Now given seven integers n, A, K, a, b, m, P, and a function f(x) which defined as following.f(x) = K, x = 1f(x) = (a*f(x-1) + b)%m , x > 1Now, Your task is to calculate( A^(f(1)) + A原创 2020-09-06 10:00:29 · 215 阅读 · 0 评论 -
模板——exCRT
#include<iostream>using namespace std;typedef long long ll;const int N = 1e6 + 10;int n;ll b[N], p[N];ll gcd(ll a, ll b) { return !b ? a : gcd(b, a % b); }ll exgcd(ll a, ll b, ll& x, ll& y) { if (b == 0) { x = 1, y = 0; return原创 2020-06-05 02:20:43 · 142 阅读 · 0 评论 -
模板——CRT(中国剩余定理)
讲解#include<iostream>using namespace std;typedef long long ll;const int maxn = 100;int n;//b[i]为余数 p[i]为模数ll b[maxn], p[maxn];//扩欧模板ll exgcd(ll a, ll b, ll& x, ll& y) { if (b == 0) { x = 1, y = 0; return a; } ll g = exgcd.原创 2020-06-01 17:38:47 · 251 阅读 · 1 评论 -
模板——特殊数列的前缀最小公倍数
形如:{ f(0)=0 f(1)=1 f(n)=af(n−2)+bf(n−1) (a,b)=1\small \begin{cases}\ f(0)=0\\\ f(1)=1\\\ f(n)=af(n-2)+bf(n-1)~~~~~~~~~~~~(a,b)=1\\\end{cases}⎩⎨⎧ f(0)=0 f(1原创 2020-05-26 01:01:53 · 138 阅读 · 0 评论 -
小a的旅行计划(组合数学与逆元)
注释:题面题意:见题面。解决思路:由题意不难看出集合A,B\small A,BA,B的个数都不能为1\small 11(1\small (1(1的时候肯定相互包含)\small ))AC代码//优化#pragma GCC optimize(2)//C#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>//C++#include<unord..原创 2020-05-24 14:24:52 · 286 阅读 · 0 评论 -
Utawarerumono(裴蜀定理)
注释:题面题意:见题面。解决思路:首先判断ax+by=c\small ax+by=cax+by=c是否有解,由裴蜀定理可知,(a,b)∣c\small (a,b)\mid c(a,b)∣c时有解。此时计算p2x2+p1x+q2y2+q1y\small p_2x^2+p_1x+q_2y^2+q_1yp2x2+p1x+q2y2+q1y最小值,发现有两个未知数,不好判断,所以将ax+by=c\small ax+by=cax+by=c转换为y=c−axb\small y=\large \frac..原创 2020-05-24 02:18:18 · 281 阅读 · 0 评论 -
序列求和(gcd与逆元)
注释:Cii+Ci+1i+...+Cni=Cn+1i+1\small C_i^i+C_{i+1}^i+...+C_n^i=C_{n+1}^{i+1}Cii+Ci+1i+...+Cni=Cn+1i+1题面题意:见题面。解决思路:结论:12+22+32+...+n2=n(n+1)(2n+1)6\small 1^2+2^2+3^2+...+n^2=\frac{n(n+1)(2n+1)}{6}12+22+32+...+n2=6n(n+1)(2n+1)证明∵i2=i2+i−i=i(i−1)+i..原创 2020-05-24 00:25:06 · 378 阅读 · 0 评论 -
模板——exgcd
#include<iostream>using namespace std;typedef long long ll;ll exgcd(ll a, ll b, ll& x, ll& y) { if (b == 0) { x = 1, y = 0; return a; } ll g = exgcd(b, a % b, y, x); y -= a / b * x; //返回值是最大公约数 return g;}int main() { ll a,原创 2020-05-22 21:11:05 · 307 阅读 · 0 评论 -
模板——gcd
#include<iostream>using namespace std;typedef long long ll;ll gcd(ll a, ll b) { return !b ? a : gcd(b, a % b); }int main() { ll a, b; cin >> a >> b; cout << gcd(a, b); return 0;}原创 2020-05-22 20:56:20 · 301 阅读 · 0 评论 -
模板——快速排序
#include<iostream>using namespace std;typedef long long ll;const int maxn = 1e6 + 10;int u[maxn];void quick_sort(int* p, int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1...原创 2020-05-22 14:41:13 · 182 阅读 · 0 评论 -
模板——线性筛莫比乌斯函数
待续…原创 2020-05-22 14:40:28 · 185 阅读 · 0 评论 -
模板——线性筛欧拉函数
#include<iostream>const int maxn = 1e6 + 10;int prime[maxn], cnt;bool vis[maxn];int phi[maxn];void init_Euler(const int n = 1e6) { for (int i = 2; i <= n; i++) { if (!vis[i]) { ...原创 2020-05-22 14:38:14 · 182 阅读 · 0 评论 -
模板——exBSGS
讲解#include<cmath>#include<iostream>#include<unordered_map>using namespace std;typedef long long ll;ll phi(ll p) { ll res = p; for (ll i = 2; i * i <= p; i++) { if (p % i == 0) { res -= res / i; while (p % i == 0) p .原创 2020-05-22 14:37:44 · 142 阅读 · 0 评论 -
模板——BSGS
void init(int a, int b, int p, int m) { for (int i = 0; i < m; i++) { ll temp = quick_pow(a, i, p); mp[(temp * b) % p] = i; }}int BSGS(int a, int b, int p) { mp.clear(...原创 2020-05-22 14:37:21 · 214 阅读 · 0 评论 -
赛后题解——问题 G: 强(矩阵快速幂)
问题 B: 挑战题目描述Lh:粉兔你教我一下抽屉原理吧Clz:就是给你一个长度为 n 的序列,每个数只能取 0,1,2,那你连续取三个数必然有两个相等……Lh:等等你梭啥,再说一遍Clz:……emmm 当我没说Marser:就是一个序列,对于每一个连续三元组都要满足其中至少有两个相等现在粉兔问你:有多少个长度为 n 的序列满足粉兔的要求?请对 19260817 取模。输入一行一个正整数n(3≤n≤1018)。输出一行一个整数,含义如题。样例输入4样例输出51原创 2020-05-22 13:58:33 · 813 阅读 · 0 评论 -
质因数分解(算术基本定理)
注释:p\small pp指代素数题面题意:见题面。解决思路:由题意知:n=p1p2\small n= p_1p_2n=p1p2。咦!!!这不就是算术基本定理吗?所以得出结论,max(p1,p2)\small max(p_1,p_2)max(p1,p2)就是所求的答案。直接枚举小于n\small \sqrt nn的因子,输出n\small nn除以因子就好了。AC代码//优化#pragma GCC optimize(2)//C#include<string.h&..原创 2020-05-22 00:12:11 · 932 阅读 · 0 评论 -
[HAOI2011]向量(裴蜀定理)
注释:本章同余针对222。题面题意:见题面。解决思路:考虑前四个向量(a,b),(a,−b),(−a,b),(−a,−b)\small (a,b), (a,-b), (-a,b), (-a,-b)(a,b),(a,−b),(−a,b),(−a,−b),设共取出n\small nn个向量,a,−a,b,−b\small a,-a,b,-ba,−a,b,−b的个数分别为xa1,xa2,yb1,yb2x_{a1},x_{a2},y_{b1},y_{b2}xa1,xa2,yb1,yb2。{&nb..原创 2020-05-20 02:37:18 · 722 阅读 · 2 评论 -
黑妹的游戏I(裴蜀定理)
题面题意:见题面。解决思路:由题意可知所有的可能情况为ax+by+cz\small ax+by+czax+by+cz所构成的数的个数,由裴蜀定理可知,(a,b,c)\small (a,b,c)(a,b,c)的倍数且小于max(a,b,c)\small max(a,b,c)max(a,b,c)的数减3\small 33就是答案,记得最后减去已有的三个数。AC代码//优化#pragma GCC optimize(2)//C#include<string.h>#include<.原创 2020-05-19 16:28:43 · 500 阅读 · 0 评论 -
计数器(裴蜀定理)
题面题意:见题面。解决思路:AC代码//优化#pragma GCC optimize(2)//C#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>//C++//#include<unordered_map>#include<algorithm>#include<iostream>#include<i.原创 2020-05-19 10:48:06 · 163 阅读 · 0 评论 -
等式(试除法与算术基本定理)
题面题意:见题面。解决思路: 观察题意,用x\small xx表示y\small yy,即y=nxx−n(x−n∣nx)\small y=\frac{nx}{x-n}{(x-n\mid nx)}y=x−nnx(x−n∣nx)。此时,会发现这个式子不好计算,所以考虑用一个参数t\small tt将x,y,n\small x,y,nx,y,n联系起来,令t=x−n\small t=x-nt=x−n就可达到效果。y=n(n+t)t(t∣n2+nt)\small y=\frac{n(n+t)}{t}(t\m.原创 2020-05-19 10:33:15 · 275 阅读 · 0 评论 -
有毒的玻璃球(线性筛完全积性函数)
题面题意:见题面。解决思路:幂函数是完全积性函数,用欧拉筛计算1\small11到n\small nn的幂函数的值存入数组powFun。\small powFun。powFun。然后观察题目,发现powFun[i]\small powFun[i]powFun[i]会被重复计算,被计算的个数正好是1\small11到n\small nn中i\small ii的倍数的个数,所以ans\small ansans每次加一下对答案的贡献就好(\small((powFun[i]×(n/i)\small powFu.原创 2020-05-19 10:29:13 · 188 阅读 · 0 评论 -
[JSOI2009]瓶子和燃料(裴蜀定理)
题面题意:见题面。解决思路:由题意可知选出k\small kk个数为a1,a2...ak−1,ak\small a_1,a_2...a_{k-1},a_ka1,a2...ak−1,ak,题目描述的操作的结果正好是k\small kk个数的线性组合,有裴蜀定理可知,操作后和结果必须是(a1,a2...ak−1,ak)\small (a_1,a_2...a_{k-1},a_k)(a1,a2...ak−1,ak)的倍数,由于外星人所给的燃料肯定是最少的,故(a1,a2...ak−1,ak)(.原创 2020-05-21 21:28:29 · 179 阅读 · 0 评论 -
模板——整除分块
#include<iostream>using namespace std;int main() { int n; cin >> n; int ans = 0; for (int l = 1, r = 1; l <= n; l = r + 1) { int val = n / l; r = n / val; ans += (r - l +...原创 2020-05-22 14:37:59 · 178 阅读 · 0 评论 -
整除分块的证明
讲解原创 2020-05-08 02:16:42 · 239 阅读 · 0 评论 -
欧拉筛的理解与实现
1,关键理解:欧拉筛的原理是保证在 2~n 范围中的每一个合数都能被唯一分解成它的最小质因数与除自己外最大的因数相乘的形式。因此我们枚举2~n中的每一个数作为筛法中的“除自己外的最大因数”,如果它未被标记为合数,就先将它放入素数表内,再将这个最大因数与素数表中已经找到的素数作为最小质因数相乘,将得到的这些数标记为合数。最后输出得到的素数表即可。2,代码实现#pragma GCC optimi...原创 2019-12-21 12:05:26 · 922 阅读 · 1 评论