数论例题

求素数的个数

一篇博客
一道题

void su()
{
	vector<bool >vis(n+1,0);
	vector<int >prime(5761456,0);//最多这么多5761455
	for(int i=2;i<=n;++i)
	{
		if(!vis[i])
		{	
			
			prime[++cnt]=i;
		}
		for(int j=1;j<=cnt&&i*prime[j]<=n;++j)
		{
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)
			break; 
		}
	}
}

同余方程

P1082 同余方程
关于同余方程的解法

#include<bits/stdc++.h>
#define intn long long
#define _0for(i, a) for(int i = 0; i < (a); ++i)
#define _1for(i, a) for(int i = 1; i <=(a); ++i)
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
	if(a<b)return exgcd(b,a,y,x);
	if(b==0)
	{
		x=1;y=0;
		return a;
	} 
	else
	{
		int x1;
		int d=exgcd(b,a%b,x1,x);
		y=x1-a/b*x;
		return d;
	}
}
main(void)
{
	int a,b;
	cin>>a>>b;
	int x=0,y=0;
	int p=exgcd(a,b,x,y);
	while(x<=0)
	{
		x+=b;
	}
	cout<<x/p<<endl;
}



乘法逆元

法一、扩欧

博客

法二、费马小定理

//递归快速幂
int qpow(int a, int n)
{
    if (n == 0)
        return 1;
    else if (n % 2 == 1)
        return qpow(a, n - 1) * a;
    else
    {
        int temp = qpow(a, n / 2);
        return temp * temp;
    }
}

法三、递推公式

因为
⌊ p i ⌋ ∗ i = p − p   m o d   i \lfloor\frac{p}{i}\rfloor*i=p-p\ mod\ i ipi=pp mod i

⌊ p i ⌋ ∗ i = − p   m o d   i \lfloor\frac{p}{i}\rfloor*i=-p\ mod\ i ipi=p mod i
因此
i − 1 = ( − p   m o d   i ) − 1 ∗ ⌊ p i ⌋ i^{-1}=(-p\ mod\ i)^{-1}*\lfloor\frac{p}{i}\rfloor i1=(p mod i)1ip

可以得到递推公式

#include<bits/stdc++.h>
#define int long long
#define _0for(i, a) for(int i = 0; i < (a); ++i)
#define _1for(i, a) for(int i = 1; i <=(a); ++i)
using namespace std;
int ans[1000]={0,1};
main(void)
{
	int n,p;
 	cin>>n>>p;
 	printf("1\n");
 	for(int i=2;i<=n;i++)
 	{
 		ans[i]=(p-(p/i))*ans[p%i]%p;
 	}
 	cout<<ans[666]<<endl;
}



除法分块

博客
题目

欧拉定理

如果a和n互质

扩展欧拉定理
在这里插入图片描述
求欧拉函数
在这里插入图片描述

int phi(int n)
{
	int ans=n;
	for(int i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)
		{
			ans=ans/i*(i-1);//这是一个p,注意先除再乘,防止炸int
			while(n%i==0) n/=i; //把质数次方因子筛没了,就不会错了
		}
	}
	if(n>=2) ans=ans/n*(n-1);//最后有可能剩下
	return ans;
}

裴蜀定理

P4549 【模板】裴蜀定理
若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充要条件是存在整数x,y使ax+by=1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值