清北数论——济南day1上

1.高精加减乘除
列个竖式模拟下就行
用字符读入,then用int数组倒序存;
负数的话转换一下
高精除主要是考 高精除以单精
2.模意义下运算
3.快速幂
a^b = a^(b/2)* a^(b/2) =(a^(b/2)) ^2;
if(b%2==1) a^b= a^(b/2)* a^(b/2)*a;

long long tmp=1;
while(b){
  if(b%2==1) tmp=tmp*a%MOD;
  a=a*a%MOD;
  b/=2;
}
return tmp;

4.最大公约数,最小公倍数
teacher看着都写过就直接略过

int gcd(int a,int b)
{
	if(!b) return a;
	return gcd(b,a%b);
}

最小公倍数=a*b/gcd(a,b);
5. 素数筛
埃式筛法
枚举每个数,如果当前数是质数,把该数的倍数全都做上标记,继续往下;没做标记的就是质数;

for(int i=2;i<=n;i++){
		if(!vis[i]){
			prime[++m]=i;
			for(int j=i;j<=n/i;j++)
			  vis[i*j]=1;
		}
}

线式筛法
埃式筛中,有的数被重复筛,例如12 =2 * 6=3 * 4;
线性筛就是让每个数只被它的最小质因子筛一遍;

for(int i=2;i<=n;i++){
		if(!vis[i]) prime[++m]=i;
		for(int j=1;j<=m&&i*prime[j]<=n;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}

6.费马小定理
如果a,p互质,那么a^(p-1)%p=1;
7.逆元
在两数互质条件下;
在模意义下不能直接做除法运算,这时就用到了逆元;
a 在mod p意义下的逆元=a^(p-2);
设a的逆元是c,则ac%mod=1;
(b/a)%mod=(b/a) * 1%mod=(b/a) * a
c%mod=b*c%mod;
8.欧拉函数 Φ(n)为小于等于n的与n互质的数的个数;
在这里插入图片描述
欧拉定理 (a^Φ(n)) %n=1;
此时逆元 a^(Φ(n)-1)= a^(-1);

for(int i=1;i<=n;i++)
     if(rec[i]==i)phi[i]=i-1;//rec[i]表示i的最小质因子;phi[i]表示Φ(i);
		else
		if( (i%(rec[i]*rec[i])==0)// 自己可以把18和36分解质因数,看看他们两个数的欧拉函数之间有什摸规律;然后就可以推出这代码了;
		   phi[i]=phi[i/rec[i]]*rec[i];
		else 
		   phi[i]=phi[i/rec[i]]*(rec[i]-1);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值