#数论学习总结

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;

引理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] 
引理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]同余。
所以b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]构成模m的一个完全剩余系。
构造素数
技术图片
 的完全剩余系
技术图片
因为
技术图片
 ,由引理2可得
技术图片
也是p的一个完全剩余系。由完全剩余系的性质,
技术图片
技术图片
易知
技术图片
 ,同余式两边可约去
技术图片
 ,得到
技术图片
这样就证明了费马小定理。 [3]

应用

编辑
计算
技术图片
 除以13的余数
技术图片
技术图片
技术图片
技术图片
技术图片
六.威尔逊定理
初等数论中,威尔逊定理给出了判定一个自然数是否为素数充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大,但借助计算机的运算能力有广泛的应用,也可以辅助数学推导。

以上是关于#数论学习总结的主要内容,如果未能解决你的问题,请参考以下文章

数论基础学习总结(持续补充中)

第一期寒假学习总结

学习笔记网络安全基础知识总结

[积性函数杜教筛莫比乌斯函数入门]学习总结

专题学习——数论(未完待续)

初等数论 ——原根指标及其应用