[数论][二次剩余][BSGS] CodeChef FN

二次剩余符号的程序计算 代数和数论中的程序计算问题之二次剩余符号的程序计算 立即下载

Description

设Fn是斐波那契数列第n项,给定FnmodP和P求最小的n。
保证5在膜P意义下有二次剩余。

Solution

经过一系列xjb推会发现FnmodP是循环的。所以答案小于P。
首先用Cipolla算法求出5的二次剩余。
考虑Fn的通项公式。设x=5√,y=5√+12就有

Fn=1x[yn+(−y)−n]
通过解一元二次方程,可以得到yn之后就BSGS求一下n,求的时候判下奇偶性就好啦。
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll A, C, P, Ans, test, Yn, Y;
map<ll, ll> ap;
ll w, rtf, RT, res;
struct Complex {
    ll r, i;
    Complex(ll _r = 0, ll _i = 0):r(_r), i(_i) {}
    inline Complex operator +(ll x) {
        return Complex((x + r) % P, i);
    }
    inline Complex operator *(Complex a) {
        ll rr = (a.r * r % P + w * a.i % P * i % P + P * 3) % P,
            ii = (a.i * r % P + a.r * i % P) % P;
        return Complex(rr, ii);
    }
};

inline ll Pow(Complex a, ll b) {
    Complex c = 1;
    while (b) {
        if (b & 1) c = c * a;
        a = a * a; b >>= 1;
    }
    return c.r;
}
inline ll Pow(ll a, ll b) {
    ll c = 1;
    while (b) {
        if (b & 1) c = c * a % P;
        a = a * a % P; b >>= 1;
    }
    return (c + P) % P;
}
inline ll Inv(ll a, ll P) {
    return Pow(a, P - 2);
}
ll Log(ll a, ll b, ll p, ll par) {
    ap.clear();
    ll m = ceil(sqrt(p)), ia = Inv(Pow(a, m), P), res;
    res = Inv(b, p); par ^= 1;
    for (int i = 0; i < m; i++) {
        if (!ap.count(res)) ap[res] = i;
        res = res * a % P;
    }
    res = 1;
    for (int i = 0; i <= m; i++) {
        if (ap.count(res) && (((ap[res] + i * m) & 1) ^ par)) return ap[res] + i * m;
        res = res * ia % P;
    }
    return -1;
}
inline ll Qr(ll x, ll p) {
    if (Pow(x, (P - 1) / 2) == P - 1) return -1;
    if (Pow(x, (P - 1) / 2) == 0) return 0;
    ll a;
    Complex k(0, 1);
    while (true) {
        a = rand();
        if (Pow((a * a - x + P) % P, (P - 1) / 2) == P - 1) break;
    }
    w = (a * a - x + P) % P;
    return Pow(k + a, (P + 1) / 2);
}
inline ll Min(ll a, ll b) {
    return a < b ? a : b;
}

int main(void) {
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    scanf("%d", &test);
    srand(19260817);
    while (test--) {
        scanf("%lld%lld", &C, &P);
        rtf = Qr(5, P);
        Ans = P;
        A = C * rtf % P;
        Y = (rtf + 1) * (P + 1) / 2 % P;

        RT = Qr((A * A % P + 4) % P, P);
        if (~RT) {
            Yn = (A + RT) * (P + 1) / 2 % P;
            res = Log(Y, Yn, P, 0);
            if (~res) Ans = Min(Ans, res);
            Yn = (A - RT + P) * (P + 1) / 2 % P;
            res = Log(Y, Yn, P, 0);
            if (~res) Ans = Min(Ans, res);
        }

        RT = Qr((A * A % P - 4 + P) % P, P);
        if (~RT) {
            Yn = (A + RT) * (P + 1) / 2 % P;
            res = Log(Y, Yn, P, 1);
            if (~res) Ans = Min(Ans, res);
            Yn = (A - RT + P) * (P + 1) / 2 % P;
            res = Log(Y, Yn, P, 1);
            if (~res) Ans = Min(Ans, res);
        }
        if (Ans == P) Ans = -1;
        printf("%lld\n", Ans);
    }
}
二次剩余平方剩余 程序 C 二次剩余,平方剩余,程序用C语言C++实现(数论 椭圆曲线) 立即下载

相关推荐

混合整数规划(MIP)在资源优化中的实战应用

本文深入探讨了混合整数规划(MIP)在资源优化中的实战应用,从菜市场采购到工厂调度,再到物流配送和钢铁厂切割问题。通过分支定界法和割平面法等技术,MIP能够有效解决包含整数和连续变量的复杂优化问题,提升企业运营效率。文章还介绍了现代求解器的优化策略和实际项目中的避坑指南,帮助读者更好地应用MIP技术。

weixin_30500105的博客 90

【二次剩余+BSGS】CC_FN Fibonacci Number

【题目】 原题地址 给定一个CCC和一个PPP,求最小的nnn使得fibn≡C(mod&nbsp;P)fib_n\equiv C(\text{mod } P)fibn​≡C(mod&nbsp;P)。 多组数据,T≤100,11≤P≤2×109T\leq 100,11\leq P\leq 2\times 10^9T≤100,11≤P≤2×109,PPP是一个素数,且个位数字为111或999 【解题思...

MEET YOU FIRST TIME 418

COMSOL两相流(相场法)

COMSOL是一款功能非常强大的多物理场仿真软件,拥有可视化和后处理工具,可方便有效的展示您的仿真效果,具有灵活、高效、友好的特点,软件能够为用户提供各类工程问题的解决方案,从而帮助广大研究和工程人员能够在科研上取得新突破。 COMSOL可以实现声学、传热、流体力学、结构力学等方面的模拟仿真,具体模块如下图所示。 COMSOL软件设置流程 定义需要求解的问题类型:针对一个需要仿真的问题,需要先对问题进行分析;分析该问题用到哪些物理场,什么样的几何模型,以及如何设置研究等。该步骤可以使用COMSOL中的

weixin_47139559的博客 1万+

[ural1132]Square Root(cipolla算法)

题意:求${x^2} \equiv n\bmod p$ 解题关键: 定理:若$a$满足$w = {a^2} - n$是模$p$的二次非剩余,即,${x^2} = w\bmod p$无解,则${(a + \sqrt w )^{\frac{{p + 1}}{2}}}$是二次剩余方程${x^2} \equiv n\bmod p$的解。 证明: $\begin{array}{l}{x^2} \eq...

weixin_30858241的博客 167

电路仿真软件PSIM简介

PSIM的基本使用操作...

qq_55203246的博客 7174

华为硬件工程师笔试题

1、基尔霍夫定理的内容是什么?(仕兰微电子)   基尔霍夫定理包括电流定律和电压定律。   电流定律(KCL):在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于零。   电压定律(KVL):在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于零。   2、平板电容公式(C=εS/4πkd)。(未知)   3、最基本的如三极管曲线特性。(未知)   4、描述反馈电路...

weixin_33717117的博客 2万+

二次剩余及其计算方法

前言 在有些时候,我们会需要求解这样的问题x2≡a(modp)x^2\equiv a\pmod{p}x2≡a(modp) 给定aaa求是否有xxx满足这个式子,若有r则称a是模p的二次剩余 若没有满足条件的xxx,则称a是模p的非二次剩余 然而在一些题目中,我们既要判定它是否是模p的二次剩余,也要判断其值,本文就对此进行一些探究 对于所有模数 二次剩余数量 我们发现a2≡(p−a)2(modp)a...

zhouyuheng2003的博客 1万+

从Verilog到GDS:手把手教你搞定Calibre LVS物理验证(附常见报错解决)

本文详细介绍了从Verilog到GDS的Calibre LVS物理验证全流程,包括工具链配置、RTL到SPICE网表转换、LVS运行配置及高级技巧。重点解析了常见报错如网络不匹配、器件不匹配和电源引脚缺失的解决方案,帮助工程师高效完成芯片物理验证,确保设计正确性。

culing2941的博客 507

二次剩余

二次剩余: 给定两个数n,P, P为一个质数,且,求一个x,使得 https://www.luogu.org/problem/P5491 题意: 求二次剩余 若有解,则按modp后递增的顺序输出在modp意义下的全部解. 若两解相同,只输出其中一个; 若无解,则输出Hola!; 题解: #include<bits/stdc++.h> #define ll lo...

wangtao的博客 380

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3224

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 63

二次剩余推理及其求解过程

定义: \quad给出一个式子x2≡n(modp)x^2≡n(mod p)x2≡n(modp),再给出nnn和ppp,如果能求得一个x满足该式子,即xxx满足x2=n+kp,k∈Zx^2=n+kp,k\in Zx2=n+kp,k∈Z,那么我们称nnn是模ppp的二次剩余,若不存在这样的xxx,那么我们称nnn是摸ppp的非二次剩余。同时我们称xxx为该二次同余方程的解。 应用: \quad对于一个...

邵光亮的博客 3676

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[数论 && 二次剩余 && BSGS] Codechef FN. FIBNACCI NUMBER

给个传送门 听vectorxj大神讲过二次剩余这题的第一反应就是求出5的二次剩余,看看能不能解方程。 设x=5√x=\sqrt 5,y=1+x2y={1+x\over 2}那么1x(yn−(1−y)n)≡C(modP){1\over x}(y^n-{({1\over -y})^n})\equiv C(\mod P)分类讨论一下n的就行,那么解一下一元二次方程就能求出 yny^n然后一直没想到有B

CE玩家 679

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Codechef:Fibonacci Number/FN——求通项+二次剩余+bsgs

题意 定义 $F_n$ 为 $$F_n = \left\{\begin{matrix}0, n=0\\ 1, n=1 \\F_{n-1} + F_{n-2}, n > 1\end{matrix}\right.$$ 现给你一个素数 $p$ 和一个非负整数 $C$,你需要最小的非负整数 $n$,使得 $F_n \equiv C (mod \ p)$. 分析 因为题目保证 $p...

dianshu1593的博客 271

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Codechef:Fibonacci Number/FN(二次剩余+bsgs)

题面 传送门 前置芝士 \(bsgs\),\(Cipolla\) 题解 因为题目保证\(p\bmod 10\)是完全平方数,也就是说\(p\bmod 5\)等于\(1\)或\(-1\),即\(5\)是模\(p\)的二次剩余(法老讲过,我忘了为啥了……) 然后我们需要用\(Cipolla\)求出\(c=\sqrt{5}\),并记\(p={1+c\over 2}\) 用斐波那契数列的通项公式代入,方程...

weixin_34348805的博客 243

Fibonacci Number CodeChef - FN (BSGS+cipolla算法)

CodeChef - FN Fibonacci Number(BSGS+cipolla) CodeChef - FN 题目大意 给出一个数问其最小与斐波那契数列数列的第几项同余于p 解题思路 斐波那契数列有着通项 Fn=15[(1+52)n−(1−52)n] F_n=\frac{1}{\sqrt5}[(\frac{1+\sqrt5}{2})^n-(\frac{1-\sqrt5}{2})^n] F...

FLY_WHITE的博客 397

「Codechef FN」Fibonacci Number

算法标签:二次剩余,BSGS

forever_dreams的博客 334

【codechef】FN/Fibonacci Number

题意 给出 c 和 P ,求最小的非负整数 n 使得 \(Fib(n)=c(mod~ P)\) 其中 P 是质数且 模 10 等于一个完全平方数(也就是说 P 的末位是个完全平方数,那么只能是 1 或者 9 ) (这里的 Fib 指的就是斐波那契数列) 前置芝士 Cipolla (attack 巨巨写的炒鸡好,%%%) BSGS (Judge 菜鸡写的炒鸡烂,踩踩踩) notesk...

weixin_30770495的博客 196

Codechef:Fibonacci Number/FN (二次剩余+BSGS)

传送门 题解: 二次剩余水题啊。。 设T=5,t=1+T2T=\sqrt{5},t=\frac{1+T}{2}T=5​,t=21+T​,然后就是解一个1T(tn−(−1)n(1t)n)≡a(modp)\frac{1}{T}(t^n - (-1)^n(\frac{1}{t})^n) \equiv a\pmod{p}T1​(tn−(−1)n(t1​)n)≡a(modp)了,这个怎么做都行。 主要是开根...

DZYO的博客 598

[斐波那契数列 求解二次剩余&二次模方程 BSGS] COGS 2114 [CodeChef FN]斐波那契数

详见:http://blog.youkuaiyun.com/wmdcstdio/article/details/49866829 我们可以考虑斐波那契的通项公式 换元可以转化成一个二次方程 根据求根公式求出后 再用BSGS求出指数 注意分奇偶考虑 #include #include #include #include #include #define cl(x) memset(x,0,sizeo

雯舞 662

知识点 - 二次剩余

知识点 - 二次剩余 解决问题类型: 求模意义下的平方根 一些公式推导有用 定义 q被称作模n的二次剩余quadratic residue 当且仅当存在x使得: x2=q(mod n) x^2=q(mod\ n) x2=q(mod n) 否则q被称作二次非剩余quadratic nonresidue 性质 两个二次剩余的乘积还是二次剩余 模n的二次剩余的数量不会超过n/2 + ...

qq_41848675的博客 4338

二次剩余之 Cipolla 算法学习笔记

文章目录前言二次剩余问题一些定理定理 1定理 2定理 3定理 4(欧拉判定准则)Cipolla 算法与其正确性证明 前言 曾经,在数个月以前,我学过一波二次剩余…… 只不过当时是被 SaInT7 所胁迫,而且时间仓促,精神不集中,最终只解得皮毛。 现在我重新学了一遍,略作总结。 二次剩余问题 已知同余方程 x2≡n(modp)x^2 \equiv n \pmod px2≡n(modp),给定 n,...

smarthehe的博客 776
上一篇: BZOJ 3239 [BSGS]
下一篇: CC QGRID [分治][树链剖分][Dijkstra]
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值