
数学知识
秘制函数
记录学习算法的过程
展开
-
AcWing 886. 求组合数 II(组合计数+逆元++费马小定理+快速幂)
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7,N=100010;int fact[N],infact[N];int qmi(int a,int p,int k){ int res=1; while(p){ if(p&1){ res=(ll)res*a%k; } p=p>>1; a=(ll)a*a%k; } ...原创 2022-05-04 14:11:16 · 181 阅读 · 0 评论 -
AcWing 875. 快速幂(快速幂)
#include<bits/stdc++.h>using namespace std;typedef long long ll;int quckymi(ll a,ll b,ll p){ ll res=1; while(b){ if(b&1){ res=res*a%p; } b=b>>1; a=a*a%p; } return res; }int main(){ ios::sync_with_stdio(0); cin.tie(.原创 2022-05-03 17:30:01 · 242 阅读 · 0 评论 -
AcWing 874. 筛法求欧拉函数(线性筛法+欧拉函数)
#include<bits/stdc++.h>using namespace std;const int N=1000010;int prime[N],cnt,eular[N];bool st[N];int main(){ int n; cin>>n; for(int i=2;i<=n;i++){ if(!st[i]){ prime[cnt++]=i; eular[i]=i-1; } for(int j=0;prime[j]*i&l.原创 2022-05-03 11:07:11 · 184 阅读 · 0 评论 -
AcWing 885. 求组合数 I (组合计数)
#include<bits/stdc++.h>using namespace std;const int mod=1000000007;const int N=2010;int c[N][N];int main(){ ios::sync_with_stdio(0); cin.tie(0); for(int i=0;i<=2000;i++){ for(int j=0;j<=i;j++){ if(j==0){.原创 2022-05-02 23:36:18 · 200 阅读 · 0 评论 -
AcWing 872. 最大公约数(gcd)
gcd算法,辗转相除法。#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ int a,b;原创 2022-04-07 14:15:53 · 124 阅读 · 0 评论 -
AcWing 870. 约数个数(约数)
结论:一个数约数的个数:分解质因数,求出每个质因数的底数和指数,约数个数就等于每个质因数的(指数+1)求积。对一个数分解质因数:假设d是n的任意一个质因数,那么一定有一对(β1,β2...βk)可以使下式成立。那么,总的约数个数就等于所有β可能的取值个数的乘积。#include<bits/stdc++.h>using namespace std;const int mod=1000000007;int n;long long res=1;unorder...原创 2022-04-07 00:19:21 · 1318 阅读 · 0 评论 -
AcWing 868. 筛质数(埃氏筛法+线性筛法)
#include<bits/stdc++.h>using namespace std;const int N=1000010;bool st[N];int n,cnt=0;void qiuz(){ if(n==1){ cout<<"0"; return ; } for(int i=2;i<=n;i++){ if(!st[i]){ cnt++; for(int j=i+i;j<=n;j=j+i){ st[j]=true;.原创 2022-04-06 09:06:41 · 506 阅读 · 0 评论 -
AcWing 866. 试除法判定质数(试除法)
#include<bits/stdc++.h>using namespace std;bool f(int a){ if(a==1){ return false; } for(int i=2;i<=a/i;i++){//小细节,sqrt()每次都执行费时间,写成i*i<=a可能会int溢出 if(a%i==0){ return false; } } return t.原创 2022-04-05 22:37:05 · 189 阅读 · 0 评论 -
AcWing 3491. 完全平方数(数学知识(分解质因数))
乘积=一个整数的平方,就相当于乘积开根号等于一个整数,如果一个数开根号等于整数,那么这个数(任意一个数都可以分成若干个质因子的乘积)每个质因数出现的次数都必须为偶数,那么这道题就是一个求解质因数的问题分解质因数。把出现次数为奇数的质因数乘一遍就是最小的x。#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ll n,x=1; cin>>n; for(int i原创 2022-03-27 09:27:04 · 356 阅读 · 0 评论 -
AcWing 867. 分解质因数(数学知识(质数))
任意一个数x的因子至多包含一个大于sqrt(x)的因子。#include<bits/stdc++.h>using namespace std;void f(int x){ for(int i=2;i<=sqrt(x);i++){ if(x%i==0){ int s=0; while(x%i==0){ s++; x=x/i; } cout<<i<<" "<<s<<endl; } .原创 2022-03-26 12:18:11 · 377 阅读 · 0 评论