[笔记] 二次剩余

欧拉准则#

对于奇素数 ppa

ap12{1(modp),x2a(modp) 有解1(modp),x2a(modp) 无解

Cipolla 算法#

  • 找到一个 a 满足 a2n 是非二次剩余。
  • i2=a2n,则 (a+i)p+1=n,故两个解分别为 (a+i)p+12 和其相反数。
int n, mod, I_2;
struct Cpx{
	int x, y;
	inline Cpx operator * (Cpx z){
		return (Cpx){
		Mod((LL) x * z.x % mod + (LL) I_2 * y % mod * z.y % mod - mod),
		Mod((LL) x * z.y % mod + (LL) y * z.x % mod - mod)};
	}
};
void solve(){
	int a, res, x0, x1;
	do a = rand() % mod, res = Mod((LL)a * a % mod - n);
	while(!a || qpow(res, mod - 1 >> 1) == 1);
	I_2 = res;
	x0 = qpow({a, 1}, mod + 1 >> 1).x;
	x1 = mod - x0;
}
注意特判 a=0
posted @   IrisT  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩