
数论
文章平均质量分 83
数论
xzx9
没事写BUG。
展开
-
CF1514-C.Product 1 Modulo N
题意给出一个 nnn (2≤n≤1052\leq n \leq 10^52≤n≤105),在 [1,n−1][1,n-1][1,n−1] 内求出一个最长的子序列,使得该序列的乘积模 nnn 等于 111。求出序列的最长长度以及序列的各个数是多少。分析首先有如下等式成立:∏gcd(x,n)=1,x<nx=±1mod n\prod_{gcd(x,n)=1,x<n}{x}=\pm1 \mod ngcd(x,n)=1,x<n∏x=±1modn根据该等式,如果乘积 ppp 取模 n原创 2021-04-21 10:47:41 · 161 阅读 · 0 评论 -
Difference between Triplets POJ - 3244
题意对于每一个三元组:Ta=(Ia,Ja,Ka),Tb=(Ib,Jb,Kb)T_a=(I_a,J_a,K_a),T_b=(I_b,J_b,K_b)Ta=(Ia,Ja,Ka),Tb=(Ib,Jb,Kb)定义:D(Ta,Tb)=max{Ia−Ib,Ja−Jb,Ka−Kb}−min{Ia−Ib,Ja−Jb,Ka−Kb}D(T_a,T_b)=\max\{I_a-I_b,J_a-J_b,K_a-K_b\}-\min\{I_a-I_b,J_a-J_b,K_a-K_b \}D(Ta,Tb)原创 2021-04-11 19:27:34 · 150 阅读 · 0 评论 -
P4240 毒瘤之神的考验【莫比乌斯反演+各种数学技巧】
毒瘤题题意:TTT 次询问,每次给定 n,mn,mn,m ,求:(∑i=1n∑j=1mφ(ij)) mod 998244353(\sum_{i=1}^{n}{\sum_{j=1}^{m}{\varphi(ij)}})\;mod\;998244353(∑i=1n∑j=1mφ(ij))mod998244353 的值。数据范围:1≤T≤104,1≤n,m≤1051\leq T \leq 1...原创 2020-02-19 23:30:49 · 160 阅读 · 0 评论 -
狄利克雷卷积
定义:即:两个积性函数的狄利克雷卷积仍为积性函数。数论函数是积性及加性函数。运算法则:原创 2020-01-28 11:43:28 · 324 阅读 · 0 评论 -
The equation SGU - 106【细节处理+区间内解的个数】
思路:用拓展欧几里的求出方程的一组解,然后求解出其他解,有很多细节的地方需要注意。注意拓展欧几里得的应用条件。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll x1,x2,y1,y2;ll exgcd(ll a,ll b,ll &x,ll &y){ if(!b)...原创 2020-01-25 20:55:56 · 422 阅读 · 0 评论 -
Help Hanzo LightOJ - 1197(大区间内的素数数量统计)
首先数据范围太大,一开始我想的是,用欧拉筛处理出1~sqrt(1<<31-1)内的素数,然后枚举[a,b]内的所有数,用预处理的素数进行判断。但一直t。正解:根据b-a<=1e5,所以可以对a和b的不同取值进行分类。先用欧拉筛处理出1e5以内的所有的素数,用vis1数组标记。当a<=1e5&&b<=1e5时:直接枚举计数即可。此外,用另一个数...原创 2019-10-30 16:20:07 · 147 阅读 · 0 评论 -
Eid LightOJ - 1024(JAVA大数)
java比赛的相关内容学习了一下Java大数的基本操作System.gc()的用处。//package vj;import java.util.*;import java.math.BigInteger;public class Main {public static void main(String args[]) { Scanner read=new Scanner(Syste...原创 2019-10-26 10:15:15 · 134 阅读 · 0 评论 -
Harmonic Number LightOJ - 1234(数学题)
为了防止超时,先预处理,把结果每100保存一次,便于查询#include <bits/stdc++.h>using namespace std;const int N=1e8+5;double sum[1000005];void init()//先预处理,然后每100存一次{ double s=0; for(int i=1;i<=N-5;i++) ...原创 2019-10-24 18:57:27 · 165 阅读 · 0 评论 -
Prime Time(素数预处理+精度误差的处理)
浮点数的精度误差,一般用1e-8和1e-6来处理。#include <bits/stdc++.h>using namespace std;typedef long long ll;int num[10005];bool check(ll n){ if(n<2) return false; for(ll i=2;i*i<=n;i++...原创 2019-10-20 19:46:16 · 237 阅读 · 0 评论 -
数论分块及应用
题解#include <bits/stdc++.h>using namespace std;const int N=3000010;const int mod=1e9+7;int p[N];int main(){ int n; while(scanf("%d",&n)!=EOF) { long long ans=0; ...原创 2019-10-14 16:36:40 · 359 阅读 · 0 评论 -
The Football Season(拓展欧几里得思维题)
总的思路:贪心因为题目中说明了w>d,那么我们可以让y取得最小非负解,那么就可以使得x+y更小,这样就使z有解的可能性最大。第一种解法:暴力根据拓展欧几里得的x,y的通解。可知y的最小非负解的取值范围是0<=y<w,题中w=1e5。那么就可以直接暴力0~w的所有值,看是否满足条件。#include <bits/stdc++.h>using namespace...原创 2019-10-14 15:37:38 · 339 阅读 · 0 评论 -
数论基础
1.唯一分解定理2.容斥定理:等号右边,每一项前面的符合取决于每一项集合的元素个数,奇数个的集合为正,偶数个的为负。原创 2019-08-18 16:49:36 · 501 阅读 · 0 评论 -
Big Number HDU - 1018
题解的方法确实让我大开眼界。求n!的位数。方法1:求10^m>=n!,的最小m值。=log10(n!)=log10(n)+log10(n-1)+log10(n-2)+…+log10(1)。为了保存精度,答案用double存,最后数据类型转换并+1。double转int向下取整。#include <bits/stdc++.h>using namespace std;...原创 2019-09-25 22:07:07 · 100 阅读 · 0 评论 -
Prime Independence LightOJ - 1356
HK+质因子分解HK是二分图匹配中匈牙利算法的优化,时间复杂度O(sqrt(n)*m)先通过bfs寻找多条增广路,记下每个点到源点的距离(类似于网络流dinic算法),然后用类似于匈牙利算法中dfs的方法,进行匹配。要求图是二分的,并且根据增广路的特性模板:#include<bits/stdc++.h>#define ll long longusing namespace...原创 2019-10-02 21:41:48 · 147 阅读 · 0 评论 -
求一个大数的前3位和后3位
求后3位,快速幂取模求前3位:对于n^k这个数,可以用10 ^p表示(p为浮点数),即10^p=n ^k,那么p=k*log10(n)用整型数x表示p的整数部分,用浮点数y表示p的小数部分,0<=y<1。那么10^p=10 ^(x+y)=(10 ^y) * (10 ^x)。即相当于用科学计数法表示,那么求前3位只要用(10 ^y) *100即可。Leading and T...原创 2019-10-04 14:53:01 · 464 阅读 · 0 评论 -
Strange Optimization
题目意思是要求在t固定的情况下,i,j任意取值,求得f(t)的所有最小值中的最大值。对于i/n-j/m而言,根据拓展欧几里得的有解的条件,那么它可以表示gcd(n,m)/(nm)的任意倍数,那么当t是固定的时,t到和它最近的两个gcd(n,m)/(nm)的倍数之间的距离中的最小值必然小于等于gcd(n,m)/2*(nm),所以,要求最大的f(t),那么其值应该为gcd(n,m)/2(nm) ,若...原创 2019-10-04 17:18:05 · 142 阅读 · 0 评论 -
Harmonic Number (II) LightOJ - 1245(数论基础!)
代理解!#include <bits/stdc++.h>using namespace std;typedef long long ll;int n;ll res;int main(){ int t,cas=0; scanf("%d",&t); while(t--) { scanf("%d",&n); ...原创 2019-10-08 21:32:09 · 136 阅读 · 0 评论 -
Number Sequence POJ - 1019
大概思路:用前缀和预处理出,当以某一个数为结尾数字时,前面的全部数字的总位数,只要处理到31268即可满足题目的要求。然后根据题目要求的位数,判断这个位置处于哪一段,然后遍历即可找到对应的数字。#include <cstdio>#include <cstring>using namespace std;const int N=31270;int num[N];...原创 2019-10-09 14:59:27 · 137 阅读 · 0 评论 -
数论模板整理!
一:1.欧几里得求最大公约数int _gcd(int x,int y){ return y?_gcd(y,x%y):x;}2.最小公倍数#include <bits/stdc++.h>using namespace std;int gcd(int x,int y){ return y?gcd(y,x%y):x;}int main(){ ...原创 2019-10-10 20:32:57 · 148 阅读 · 0 评论 -
莫比乌斯反演
莫比乌斯函数μ(d):(积性函数)d=1时:μ(d)=1;d=p1p2…*pk时(两两为互质的质数),μ(d)=(-1)^k其他情况,μ(d)=0;线性筛莫比乌斯函数(基于欧拉筛):#include <bits/stdc++.h>using namespace std;const int N=1e5+5;vector<int>prime;int mob[N...原创 2020-02-19 10:15:41 · 304 阅读 · 0 评论 -
线性方程组+高斯消元
作用:1.解n元一次线性方程组2.可以用来求矩阵的秩3.求可逆方阵的逆矩阵其本质就是通过初等行变换,把线性方程组的增广矩阵化为行阶梯型矩阵。未优化的高斯消元:(顺序消去法)基本思想:目标就是把系数矩阵的增广矩阵通过初等行变换一步一步的转化为行阶梯型矩阵,然后从后到前把已求出的解代入前面的方程依次求解出各个解。同时注意无解的情况(见代码)。洛谷P3389【模板】#include &l...原创 2019-09-16 16:55:33 · 357 阅读 · 0 评论 -
Minimum Sum LCM UVA - 10791
数论题,唯一分解定理的应用把每个n分解成素数的幂的表示形式,把相同的素因子放在一起时,有最小和。特殊情况:n=1时,只有一个素因子时,列素数时,只需列一部分即可,如果最后无法分解,表示最后剩下的数即为素数。pow有精度损失,自己手写。#include <cstdio>#include <cstring>#include <vector>#i...原创 2019-08-18 15:08:49 · 152 阅读 · 0 评论 -
Choose and divide UVA - 10375
求两个组合数的商,数据大,肯定不能直接算。根据唯一分解定理,每个数可以分解成若干个素数的幂的乘积的形式。可以把分解成的素数的幂记下来,最后知道每个素数的出现次数,依次求幂即可。主要的收获:1.学会用唯一分解定理2.复习了欧拉筛3.pow()的函数原型:double pow(double,double) 因此用来算整数的幂时,会有精度损失。可以用重载来解决。4.组合数的定义。代码:...原创 2019-08-18 10:36:56 · 93 阅读 · 0 评论 -
线性同余方程
一.一元线性同余方程形如 ax=b(mod m),a,b,为整数,m为正整数,x为未知数的同余式称为一元线性同余方程。方程可以变形为:ax+my=c (1)而对于方程 ax+by=(a,b) (2)是一定有解的。因此可以把方程(1)转化为方程(2)求解。利用拓展欧几里得算法,解出方程(2)的解,利用常数项的比例关系,可以推出方程(1)的解。方程(1)有解的充要条件为 c%gcd(a...原创 2019-08-25 11:50:36 · 2240 阅读 · 0 评论 -
Reduced ID Numbers POJ - 2769
思路:暴力枚举#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=1e6-1;int SIN[305],maxn;bool vis[N+1];int main(){ int t; scanf("%d",&am...原创 2019-08-24 16:22:00 · 86 阅读 · 0 评论 -
Prime Distance POJ - 2689
大区间素数查找。因为给出的数据范围太大,无法开到那么大的数组,所以不可以一开始预处理出所有的素数。又因为l和u之间的差值最大1e6,所以也不可能一个一个地去判断。正确的方法时,先预处理出 sqrt(N)范围内的全部素数,那么就可以通过这些素数来判断1~N内的所有数是素数还是合数。对于给定的区间[l,u],利用埃氏筛的思想,选择相应的素数,把给定区间的素数的倍数给去除。又考虑到数据范围,可以...原创 2019-08-24 14:35:02 · 138 阅读 · 0 评论 -
Killer Names HDU - 6143
容斥定理的思想。当长度为n时,对于姓所用的字符个数从1~m-1讨论。f[i]表示长度为n的姓用i个字符时,姓的可能数量。那么f[i] = in-c[i][i-1]*(i-1)n-c[i][i-2]*(i-2)^n…因为要保证不重复,当用i个字符时,如果只用了i-1个,那么这种情况在只用i-1个字符时就已经讨论过了,所有要减去,其他的也是这样。具体过程;先利用杨辉三角,打表组合数。利用...原创 2019-08-24 09:18:37 · 95 阅读 · 0 评论 -
The Balance POJ - 2142
拓展欧几里得的通解的应用;已知两个特解x0,y0,通解 :x=x0+k*(b/gcd) y=y0-k*(a/gcd)然后根据条件对一定范围内的解进行依次求解#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std...原创 2019-08-19 20:34:41 · 109 阅读 · 0 评论 -
C Looooops POJ - 2115
#include <cstring>#include <cstdio>#include <cmath>using namespace std;typedef long long ll;ll a,b,c,k;ll _gcd(ll a,ll b,ll &x,ll &y){ if(b==0) { x=1;...原创 2019-08-18 21:18:45 · 147 阅读 · 0 评论 -
高次同余方程
详解下面的模板中是,调用函数时是A,B,C A^x=B(mod C)poj3243(模板题)#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int INF=0x3f3f3f3f;typed...原创 2019-08-26 09:17:58 · 231 阅读 · 0 评论 -
矩阵快速幂专题
poj3233经典题因为k的值太大,如果直接算,肯定会超时。因此采用二分的方法。#include <cstdio>#include <cstring>using namespace std;int n,k,m;struct matrix{ int mat[35][35];};matrix A;void init(matrix &a)...原创 2019-08-26 11:41:50 · 134 阅读 · 0 评论 -
因子和与因子个数,求逆元的通用方法
先上公式:因子和:如果p为素数,a为整数,那么p^a 的因子和为1 + p + p^2 + p ^3+…+p ^a=(p ^(a+1) - 1)/(p-1);(等比数列求和)如果对于对于一个整数数 n,可以进行质因数分解成 p1^a1 * p2 ^a2 p3 ^a3…pk ^ak那么因子和为:多个等比数列求和式的和。因子个数:(a1+1)(a2+1)…(ak+1)poj2992...原创 2019-09-11 15:24:09 · 362 阅读 · 0 评论 -
指数循环节
题集hdu 4335#include <cstdio>#include <cstring>using namespace std;typedef unsigned long long ll;ll b,P,ep,ans,M;ll euler(ll x){ ll res=x; for(ll i=2;i*i<=x;i++) { ...原创 2019-09-10 16:47:53 · 184 阅读 · 0 评论 -
多项式
多项式的gcd:uva 10951原创 2019-09-06 18:42:30 · 119 阅读 · 0 评论 -
容斥定理专题
介绍Co-prime HDU - 4135用位运算生成所有可能#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const int N=1e3+5;ll a,b,n;int num;ll fac[N];void factor(){ ll tn...原创 2019-09-04 21:30:31 · 182 阅读 · 1 评论 -
欧拉降幂
题目hdu2837模板题:#include <cstdio>//欧拉降幂#include <cstring>using namespace std;typedef long long ll;ll euler(ll x){ ll res=x; for(ll i=2;i*i<=x;i++) { if(x%i==0)...原创 2019-09-04 17:59:56 · 187 阅读 · 0 评论 -
欧拉函数
1.首先明确积性函数对于算术函数f(x)如果如果对于任意两个互质的正整数n,m,有f(nm)=f(n)*f(m),那么称该函数为积性函数。如果对任意两个正整数n,m都满足f(nm)=f(n)*f(m),那么称为完全积性函数。2.欧拉函数的概念φ(n);表示不大于n,并且和n互质的数的个数(包括1)。φ(1)=1;3.定理1:如果f(x)为积性函数,通过质因子分解可以表示为x=p1...原创 2019-09-02 16:54:33 · 4142 阅读 · 0 评论 -
跳蚤 POJ - 1091
质因子分解+容斥定理#include <cstdio>#include <cstring>#include <vector>using namespace std;typedef long long ll;const int N=1e5+5;int n,num,m;ll res;vector<int>p;int c[N];voi...原创 2019-08-31 09:07:43 · 125 阅读 · 0 评论 -
解不定方程
1.二元一次不定方程ax+by=c直接用拓展欧几里得算法,加上判断是否有解。c%gcd==0同时知道通解的表示。2.n元一次不定方程原创 2019-08-30 22:09:23 · 145 阅读 · 0 评论 -
GCD XOR UVA - 12716
题目一开始看,完全没有思路。看了书上的分析才会,而且枚举过程一开始也写错了。本题主要是利用性质,如果gcd(a,b)==a^b=c,那么b=a-c。(书上有证明,打表可以看出),然后主要枚举a ,c即可。枚举的方法借鉴与素数筛法,减小时间复杂度。(一开始不会),同时利用递推的关系先预处理出每个n对于的值。最后只要输出即可。知道了异或的性质:a ^ b = c 则 a ^ c = b#in...原创 2019-08-18 16:19:16 · 96 阅读 · 0 评论