#数论学习总结
Posted little-cute-hjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#数论学习总结相关的知识,希望对你有一定的参考价值。
一.辗转相处模板&&扩欧求逆元模板
blog:https://blog.csdn.net/m0_37579232/article/details/81428065
https://blog.csdn.net/m0_37579232/article/details/89810566
int gcd(int x,int y)
return y?gcd(y,x%y):x;
//exgcd 扩欧求逆元
int exgcd(int a,int b,int &x,int &y)//calc ax+by=gcd(a,b);
if(b==0)
x=1,y=0;
return a;
int g=exgcd(b,a%b,y,x);
y-=a/b*x;
return g;
int exgcd(int a,int b,int &x,int &y)
if(b==0)
x=1,y=0;
return a;
else
int g=exgcd(b,a%b,y,x);
y-=a/b*x;
return g;
注意以下情况:
1.如果要求解ax+by=k不定方程的解,当且仅当k|gcd(a,b)时有解
2.求ax+by=k的解,先求ax+by=gcd(a,b)的解,
那么x0=x*k/gcd(a,b),y0=y*k/gcd(a,b);为所需的解
3.如何求该不定方程的最小正整数解??
x=((x*K/gcd(a,b))%(b/gcd(a,b))+(b/gcd(a,b)))%(b/gcd(a,b));
二.欧拉函数
https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0/1944850?fr=aladdin
https://blog.csdn.net/sentimental_dog/article/details/52002608
/欧拉函数
//法一:根据定义直接得出
int euler(int n)
int res=n,a=n;
for(int i=2;i*i<=a;i++)
if(a%i==0)
res=res/i*(i-1);
while(a%i==0)
a/=i;
if(a>1) res=res/a*(a-1);
return res;
//法二:同时完成欧拉筛+欧拉函数的计算
int m[N],phi[N],p[N],nump;
//m存储第i个数是否为素数,phi[i]存储第i个数的欧拉函数值
//p[i]存储第i个素数,nump存储p数组的大小
void calc()
phi[1]=1;
for(int i=1;i<=n;i++)
if(!m[i])
p[++nump]=i;
phi[i]=i-1;
else
for(int j=1;j<=nump&&p[j]*i<=n;j++)
m[p[i]*i]=1;
if(i%p[j]==0)
phi[i*p[j]]=phi[i]*p[j];
else
phi[i*p[j]]=phi[i]*(p[j]-1);
三.筛法求素数
https://www.luogu.org/problemnew/solution/P3383
例题:https://www.luogu.org/problem/P3383
#include<cstdio>
#include<cstring>
#define N 10000002
using namespace std;
int n,m,pn,t;
bool prime[N];
int Prime[N];
inline void Sieve()
memset(prime,true,sizeof(prime));
prime[0]=prime[1]=false;
for(int i=2;i<=n;i++)
if(prime[i])
Prime[pn++]=i;
for(int j=0;j<pn&&Prime[j]*i<=n;j++)
prime[Prime[j]*i]=false;
if(i%Prime[j]==0)
break;
return;
int main()
scanf("%d %d",&n,&m);
Sieve();
for(int i=1;i<=m;i++)
scanf("%d",&t);
if(prime[t])
printf("Yes\n");
else
printf("No\n");
return 0;
四.积性函数
https://baike.baidu.com/item/%E7%A7%AF%E6%80%A7%E5%87%BD%E6%95%B0/8354949?fr=aladdin
五.费马小定理
对于素数p和整数a,若(a,b)=1,则a的p-1次幂膜p余1;
若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当a·c≡b·c(mod m)时,有a≡b(mod m)。
证明:a·c≡b·c(mod m)可得ac–bc≡0(mod m)可得(a-b)·c≡0(mod m)。因为(m,c)=1即m,c互质,c可以约去,a– b≡0(mod m)可得a≡b(mod m)。 [2]
设m是一个整数且m>1,b是一个整数且(m,b)=1。如果a[1],a[2],a[3],a[4],…a[m]是模m的一个完全剩余系,则b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]也构成模m的一个完全剩余系。
证明:若存在2个整数b·a[i]和b·a[j]同余即b·a[i]≡b·a[j](mod m)..(i>=1 && j>=1),根据引理1则有a[i]≡a[j](mod m)。根据完全剩余系的定义可知这是不可能的,因此不存在2个整数b·a[i]和b·a[j]同余。
以上是关于#数论学习总结的主要内容,如果未能解决你的问题,请参考以下文章