【史前巨坑】数论模板整合

跪了一下午数论

整理了一下数论模板

这是个史前巨坑,有空慢慢填

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 1000000
using namespace std;
bool not_prime[MAXN];
int prime_number[MAXN];
int nu;
int factor[MAXN];//顺手记录一下最小质因子
void prime()//线筛
{
	for (int i=2;i<=MAXN;i++)
	{
		if (!not_prime[i])
		{
			prime_number[++nu]=i;
			factor[i]=i;
		}
		for (int j=1;j<=nu&&i*prime_number[j]<=MAXN;j++)
		{
			not_prime[i*prime_number[j]]=1;
			f[i*prime_number[j]]=prime_number[j];
			if (i%prime_number[j]==0) break;
		}
	}
}
int mu[MAXN]={0,1};
void mu()//莫比乌斯函数
{
	for (int i=2;i<=MAXN;i++)
	{
		if (!not_prime[i])
		    mu[i]=-1;
		for (int j=1;j<=nu&&i*prime_number[j]<=MAXN;j++)
		{
			not_prime[i*prime_number[j]]=1;
			if (i%prime_number[j]==0)
			{
				mu[i*prime_number[j]]=0;
				break;
			}
			else
			{
				mu[i*prime_number[j]]=-mu[i];
			}
		}
	}
}
int phi[MAXN];
void phi()//欧拉函数
{
	for (int i=2;i<=MAXN;i++)
	{
		if (!not_prime[i])
		{
			phi[i]=i-1;
		}
		for (int j=1;j<=nu&&i*prime_number[j]<=MAXN;j++)
		{
			not_prime[i*prime_number[j]]=1;
			if (i%prime_number[j]==0)
			{
				phi[i*prime_number[j]]=phi[i]*prime_number[j];
				break;
			}
			else
			{
				phi[i*prime_number[j]]=phi[i]*(prime_number[j]-1);
			}
		}
	}
}
int inv[MAXN];
//以下连续逆元
void inv1()//费马小定理
{
	for (int i=1;i<=MAXN;i++)
	    inv[i]=pow(i,phi[p]-1)%p;//p根据题目要求不同来定
}
void inv2()//基于线筛的求法
{
	for (int i=2;i<=MAXN;i++)
	{
		int a=p/i;
		int b=p%i;
		inv[i]=(p-a)*inv[b]%p;
	}
}
void inv3()//基于阶乘的求法
{
	unsigned long long a[MAXN]={1},rev[MAXN];//这个阶乘略大0-0不想写高精度了unsigned凑活看着吧
	for (int i=1;i<=MAXN;i++)
	    a[i]=a[i-1]*i;
	rev[MAXN]=pow(a[MAXN],phi[p]-1)%p;
	for (int i=MAXN-1;i>=0;i--)
	    rev[i]=rev[i+1]*(i+1)%p;
	for (int i=1;i<=MAXN;i++)
	    inv[i]=a[i-1]*rev[i];
}
void inv4()//基于a*i+b=p的求法,此做法仅用于p为素数
{
	inv[1]=1;
	for (int i=2;i<=MAXN;i++)
	{
		int a=p/i;
		int b=p%i;
		inv[i]=(p-a)*inv[b]%p;
	}
}
//中国剩余定理,原根,离散对数,Lucas定理做组合数,mobius反演未完待续=。=
//感谢LYP神犇的授课。逆元里后三种求法还有莫比乌斯函数都是他讲的。。。
/*int main()
{

}*/
时间: 2024-12-17 15:15:36

【史前巨坑】数论模板整合的相关文章

&lt;微影看&gt;巨坑开填一

前言:原本我想 哈哈,几分钟把微信公众号全部搞掂,然后去浪...才发现 我想多了.. 下面介绍如何填巨坑一!!! 这次目标:把微信公众号配置好,配置上URL Token,以便以后数据的连接. 首先要说一下,为什么说这次是巨坑,搭建个微信公众号那么简单也叫巨坑??? 这要从微信公众号的分类说起,微信公众号有三种:个人订阅号,服务号,企业号.每一种都各自特点,详情自己百度啊 哈哈哈. 我们 微影看 要有后台数据库网站语音搜索网页链接等功能接入,就必须要服务号或者企业号,这对于我们这些学生党是根本不可

【模板整合计划】一些好玩的函数

[模板整合计划]一些好玩的函数 之前闲得无聊用 \(C++\) 写了几个小游戏,在这期间学了一些 \(windows.h\) 里的函数... (以下函数若无特殊说明均需要使用函数库 <\(windows.h\)> 或者万能头 <\(bits\)/\(stdc\)++\(.h\)>) [ clock ( ) , CLOCKS _ PER _ SEC ] 头文件: <\(ctime\)> 功能: \(clock()\) 是计算从 \("\) 开启这个程序 \(&q

关于代码通过API操作阿里云RDS的巨坑

由于项目原因,要通过API操作阿里云的数据库,于是简单研究了一下阿里云提供的相关文档,发现官方提供了.NET的SDK,而且还提供了github开源代码,这个要为阿里点赞! 于是到github上弄了一份源码,发现源码文件相当多,尝试了一下只提取几个需要用到的类文件放到项目中,经过测试好像不行,也可能本人水平未达到,反正就是不行,最终放弃. 然后测试了一下引用项目和引用dll都没有问题,基本顺利. 在测试创建用户的时候遇到了一个坑,也可以说是巨坑!在创建账号的API文档中关于AccountType的

cocos2d-x + Lua的cc.Repeat动画执行次数不准,巨坑

Repeat这个Action的本意是可以方便地对某一个动画执行指定的次数,比如这段代码: scene.index = 0 --延时 local delayAction = cc.DelayTime:create(0.5) --回调 local callFuncAction1 = cc.CallFunc:create(function() scene.index = scene.index + 1 cclog("index: %d", scene.index) end) --序列 loc

【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studio默认采用的却是gradle方式,与ADT编辑的方式大不相同,那再andorid studio中如何导入so文件呢? 在android studio 中我们可能会用到jar包和so文件的方式,对于jar包可能接触更多,只需要我们把工程转换为project显示方式,打开app下的libs文件夹,导入即

Yii框架学习笔记(二)将html前端模板整合到框架中

选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/topics/390807796 更多内容 百度:yii 前端 http://my.oschina.net/u/1472492/blog/221085 摘要 Yii框架学习笔记(二)将html前端模板整合到框架中 原文地址:http://www.ldsun.com/1309.html 上一节成功将Y

【单页应用巨坑之History】细数History带给单页应用的噩梦

前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History随着Html5的发展,移动端的兴旺,单页应用出现了,于是History的处理被不得不提上议程了!要知道,这一直是一项让人不愿意去碰的巨坑,但是单页应用却不得不去解决 首先History的处理逻辑看似简单,实则负责,稍不注意就会出问题,我们这里来探讨下单页中History的处理规则 基础知识 javascript中History

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填. SpriteNode节点在被copy()复制后,会自动被设置为暂停,也就是节点的所有Action全部不可用,如果需要使用node.run(SKAction.run{//c

【C++】linux下头文件io.h的巨坑

摘要:采用 io.h 头文件提供的函数读取指定文件夹中多个文件(文件名没有规律) 系统配置:ubuntu16.04, cmake编译 读取文件的代码如下, void getFilesAll(string path, vector<string>& files) { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).appe