![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
Are_you_ready
这个作者很懒,什么都没留下…
展开
-
求1-n因数和||n-m因数和
求1-n因数和:ll solve(ll n){ ll x=sqrt(n); ll ans=0; for(int i=1;i<=x;i++){ ans+=n/i; } return ans*2-x*x;}求n-m因数和ll solve(ll n){ ll x=sqrt(n); ll ans=0; for(int i=1;i<=x;i++){ ans+=n/i; } retu原创 2021-05-24 18:27:20 · 166 阅读 · 0 评论 -
D - Jumps Gym - 101341D(任选a[i]跳&从0跳到x点----裴蜀定理)
题目:https://vjudge.z180.cn/problem/Gym-101341D题意:初始在0位置,每次从n个a[i]中选择一个进行跳跃,问能否跳到x点题解:裴蜀定理#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f3f3f3f3f;const int N=1e6+7;int main(){ ll x; ll n; cin原创 2021-01-20 08:35:57 · 123 阅读 · 0 评论 -
佳佳的斐波那契--acwing(矩阵乘法快速幂)
用 T(n)=(F1+2F2+3F3+…+nFn)modm 表示 Fibonacci 数列前 n 项变形后的和 modm 的值。现在佳佳告诉你了一个 n 和 m,请求出 T(n) 的值。输入格式:共一行,包含两个整数 n 和 m。输出格式:共一行,输出 T(n) 的值。数据范围:1≤n,m≤231−1输入样例:5 5输出样例:1样例解释T(5)=(1+2×1+3×2+4×3+5×5)mod5=1题目:https://www.acwing.com/activity/content/原创 2021-01-09 16:48:30 · 180 阅读 · 0 评论 -
斐波那契前 n 项和--acwing(矩阵法求斐波那契数列&&矩阵快速幂)
大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2。现在问题很简单,输入 n 和 m,求 fn 的前 n 项和 Snmodm。输入格式:共一行,包含两个整数 n 和 m。输出格式:输出前 n 项和 Sn mod m 的值。数据范围:1≤n≤2000000000,1≤m≤1000000010题意:求斐波那契数列前n项和题解:这里,n的范围太大了,直接遍历肯定超时,这里用了一个矩阵快速幂的方法。求第n项斐波那契的值,可以用矩阵的方法原创 2021-01-08 16:45:41 · 368 阅读 · 0 评论 -
青蛙的约会--acwing(扩展欧几里得&&a,b,c为小式子&可能为负数)
扩展欧几里得:1.给任意a,b,c,,,求ax+by=c,这里的c必须是gcd(x,y)的整数倍才会又整数解,否则没有整数解.2.利用扩展欧几里得求ax+by=gcd(a,b)可以得到一组(x0,y0)解,那么就可以得到所有的解x=x0+k(b/gcd(a,b))y=y0-k(a/gcd(a,b)) 这里的k是任意正整数。(若是ax-by,那么这里的y=y0+k(a/gcd(a,b))3.一般用来求ax≡p( mod b )等价于ax+by=p,如果p不是gcd(a,b)的倍数,那么无解,否则原创 2020-12-31 15:40:05 · 121 阅读 · 0 评论 -
同余方程--acwing( 扩展欧几里得 )
扩展欧几里得:1.给任意a,b,c,,,求ax+by=c,这里的c必须是gcd(x,y)的整数倍才会又整数解,否则没有整数解.2.利用扩展欧几里得求ax+by=gcd(a,b)可以得到一组(x0,y0)解,那么就可以得到所有的解x=x0+k(b/gcd(a,b))y=y0-k(a/gcd(a,b)) 这里的k是任意正整数。3.一般用来求ax≡p( mod b )等价于ax+by=p,如果p不是gcd(a,b)的倍数,那么无解,否则,求出ax+by=gcd(a,b)然后两边同时乘以p/gcd(a,原创 2020-12-31 13:21:38 · 146 阅读 · 0 评论 -
最大公约数--acwing(求n范围内gcd(x,y)=p的个数&&p为质数)
题目:https://www.acwing.com/problem/content/222/给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对。GCD(x,y)即求x,y的最大公约数。输入一个整数N输出一个整数,表示满足条件的数对数量。1≤N≤1e7输入样例:4输出样例:4题解:求gcd(x,y)=p,p是质数,那么就是求gcd(x/p,y/p)=1,即1<=xx,yy<=n/p里面互质对儿个数,所以枚举n范围内的所以p,然后求出原创 2020-12-31 11:04:01 · 209 阅读 · 0 评论 -
可见的点--acwing(n*n大小的坐标轴,y=kx,上的第一个点的个数 & 横纵坐标互质)
在一个平面直角坐标系的第一象限内,如果一个点(x,y)与原点(0,0)的连线中没有通过其他任何点,则称该点在原点处是可见的。例如,点(4,2)就是不可见的,因为它与原点的连线会通过点(2,1)。部分可见点与原点的连线如下图所示:编写一个程序,计算给定整数N的情况下,满足0≤x,y≤N0≤x,y≤N的可见点(x,y)的数量(可见点不包括原点)。题意:从原点发出光线,可以照到的柱子的数量,光线会被第一个柱子挡住。题解:每一条直线都是y=kx,,被照到的柱子都是这条直线上的第一个点,设这个点为x0原创 2020-12-30 19:53:22 · 145 阅读 · 0 评论 -
线性求欧拉函数(1-n的每个)
欧拉筛加一个数组再加点东西。求出1-n的每一个欧拉函数const int N=1e5+10;int prime[N+10],vis[N+10];int cnt;int phi[N];void init(int n){ cnt=0; vis[0]=vis[1]=1; phi[1]=1; for(int i=2; i<=n; i++) { if(vis[i]==0) { prime[cnt++]=原创 2020-12-30 19:20:45 · 204 阅读 · 0 评论 -
求单个欧拉函数
求[1,n]中与n互质的数模板如下int Euler(int n){ int ret=n,i; for(i=2;i*i<=n;i++) //如果i*i可能会超出int,那么就用sqrt(n) if(n%i==0) { ret=ret/i*(i-1);//先除以i,防止超出int,造成错误 while(n%i==0) n/=i; } if(n>1) ret=ret/原创 2020-08-10 11:58:22 · 115 阅读 · 0 评论 -
Hankson的趣味题--acwing(快速求一个数的所有约数)
题目:https://www.acwing.com/problem/content/202/可能需要报名课程才能做。题意:给a,b,c,d四个数,范围是1–2e9,求x和a的最大公约数是b,x和c的最小公倍数是d,满足条件的x有多少个。首先输入一个n,代表n组数据,n的范围是1-2000题解:这个题其实就找d的所有约数,然后枚举每一个约数就行,int范围内数量最大的约数是1600,所以枚举不多,难的是求d的所有约数,因为有2000的输入,如果直接暴力求根下n的复杂度,如果给1s时间复杂度是可以过的,但题原创 2020-12-30 18:49:46 · 238 阅读 · 0 评论 -
樱花--acwing(求n!的约数个数&阶乘的质因分解&求约数公式)
题目:https://www.acwing.com/activity/content/11/ 可能需要报名课程才能做。给定一个整数 nn,求有多少正整数数对 (x,y)(x,y) 满足 1/x+1/y=1/n!。输入格式:一个整数 n。输出格式:一个整数,表示满足条件的数对数量。答案对 109+7取模。数据范围1≤n≤106题意:将这个公式化简最后可以化简为:y=n!+(n!)平方/(x-n!)题解:求阶乘的质数分解,然后(c12+1)×(c22+1)—就是答案求某个数的约数个数公式原创 2020-12-29 21:00:51 · 284 阅读 · 0 评论 -
轻拍牛头--acwing ( 一个数列中每个数在这个数列中拥有的约数个数 )
题目:https://www.acwing.com/activity/content/11/题意是:给一个序列包括n个数,n的范围1e5,a[i]的范围1e6找每一个数在这个数列中拥有的约数的个数如:序列:2 1 2 3 4 答案:2 0 2 1 3 这里2的约数有两个分别是1和2,1没有约数,3只有1一个约数,4有3个约数题解:这个时候我们不能正着去想直接暴力,这样肯定超时,换一个想法,我们去找在1e6的范围内:1的倍数,2的倍数,3的倍数-----1e6的倍数,类似埃氏筛的方法,,,,,然后原创 2020-12-29 11:12:59 · 111 阅读 · 0 评论 -
越狱(俩个快速幂相减如果为负数就加上mod)
题目:https://www.acwing.com/problem/content/1292/监狱有连续编号为 11 到 nn 的 nn 个房间,每个房间关押一个犯人。有 mm 种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。求有多少种状态可能发生越狱。输入格式:共一行,包含两个整数 mm 和 nn。输出格式:可能越狱的状态数,对 100003100003 取余。数据范围1≤m≤108 //10的8次方1≤n≤1012//10的12次方输入样例:原创 2020-12-28 21:45:11 · 156 阅读 · 0 评论 -
质数距离(二次筛法(数太大需要根号筛,利用筛出来的数再去筛其他的,中间再用下标平移))
题目:https://www.acwing.com/problem/content/198/给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1-D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。输入格式:每行输入两个整数L和U,其中L和U的差值不会超过1000000。输出格式:对于每个L和U ,输出一个结果,结果占一行原创 2020-12-28 20:40:41 · 238 阅读 · 0 评论 -
欧拉筛(线性筛模板)
const int maxx = 1e7+10;int prime[maxx+10];bool vis[maxx+10];void sushu(){`` int num=0; vis[0]=vis[1]=1; for(int i=2; i<maxx; i++) { if(vis[i]==0)prime[++num]=i;//存素数 for(int j=1; j<=num; j++) //遍历每个素数 { .原创 2020-09-25 20:54:05 · 186 阅读 · 0 评论 -
取模+乘法+除法
每一步中取余,和,总的取余对结果没有影响,因为264就超ll,所以不能把2m单独拿出来,需要在求n的阶乘的时候就给它除掉,总的s/总的sum,和,在求s的过程中慢慢把sum给除掉结果一样哪怕中间有对s的取余题目...原创 2020-09-09 10:09:52 · 243 阅读 · 0 评论 -
G - Great dinner Gym - 102700G
https://vjudge.net/contest/392956#problem/GG - Great dinner Gym - 102700GUNAL is about to restart classes and the leaders of the algorithms group want to receive all its members with a great dinner in the university campus central dining room.The group原创 2020-09-09 10:08:34 · 406 阅读 · 1 评论