POJ2417 Discrete Logging【高次同余方程】

2024-06-15 05:18

本文主要是介绍POJ2417 Discrete Logging【高次同余方程】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

http://poj.org/problem?id=2417


题目大意:

已知整数P、B、N满足公式B^i = N(mod P),求i的值是多少。


思路:

典型的解高次同余方程A^x = B(mod C),直接套模板解决。注意输入顺序:C A B


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define LL __int64
using namespace std;
const int MAXN = 65535;struct HASH
{int a;int b;int next;
}Hash[MAXN*2];int flag[MAXN+66];
int top,idx;void ins(int a,int b)
{int k = b & MAXN;if(flag[k] != idx){flag[k] = idx;Hash[k].next = -1;Hash[k].a = a;Hash[k].b = b;return;}while(Hash[k].next != -1){if(Hash[k].b == b)return;k = Hash[k].next;}Hash[k].next = ++top;Hash[top].next = -1;Hash[top].a = a;Hash[top].b = b;
}int Find(int b)
{int k = b & MAXN;if(flag[k] != idx)return -1;while(k != -1){if(Hash[k].b == b)return Hash[k].a;k = Hash[k].next;}return -1;
}int GCD(int a,int b)
{if(b == 0)return a;return GCD(b,a%b);
}int ExGCD(int a,int b,int &x,int &y)
{int temp,ret;if(!b){x = 1;y = 0;return a;}ret = ExGCD(b,a%b,x,y);temp = x;x = y;y = temp - a/b*y;return ret;
}int Inval(int a,int b,int n)
{int x,y,e;ExGCD(a,n,x,y);e = (LL)x*b%n;return e < 0 ? e + n : e;
}int PowMod(LL a,int b,int c)
{LL ret = 1%c;a %= c;while(b){if(b&1)ret = ret*a%c;a = a*a%c;b >>= 1;}return ret;
}int BabyStep(int A,int B,int C)
{top = MAXN;++idx;LL buf = 1%C,D = buf,K;int d = 0,temp,i;for(i = 0; i <= 100; buf = buf*A%C,++i){if(buf == B)return i;}while((temp = GCD(A,C)) != 1){if(B % temp)return -1;++d;C /= temp;B /= temp;D = D*A/temp%C;}int M = (int)ceil(sqrt((double)C));for(buf = 1%C,i = 0; i <= M; buf = buf*A%C,++i)ins(i,buf);for(i = 0,K = PowMod((LL)A,M,C); i <= M; D = D*K%C,++i){temp = Inval((int)D,B,C);int w;if(temp >= 0 && (w = Find(temp)) != -1)return i * M + w + d;}return -1;
}int main()
{int A,B,C;while(~scanf("%d%d%d",&C,&A,&B)){B %= C;int temp = BabyStep(A,B,C);if(temp < 0)printf("no solution\n");elseprintf("%d\n",temp);}return 0;
}


这篇关于POJ2417 Discrete Logging【高次同余方程】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062522

相关文章

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.+后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

R语言结构方程模型分析与实践技术应用

结构方程模型(Sructural Equation Model)是一种建立、估计和检验研究系统中多变量间因果关系的模型方法,它可以替代多元回归、因子分析、协方差分析等方法,利用图形化模型方式清晰展示研究系统中变量间的因果网络关系,是近年来地学、生态、进化、环境、医学、社会、经济领域中应用十分广泛的统计方法。然而,自Wright在1920年美国科学院院刊(PNAS)提出第一个通径/路径(Pa

解决ax+by=c,不定方程(扩展欧几里得)

首先有几个定理我们需要知道,在这里我也会一一证明。 —————————————————————————————————————— 定理1:gcd(a,b)==gcd(b,a%b);这个是欧几里得提出并证明的。 (%是取余的意思,在数学中 可用mod表示); 以下是证明过程 —————————————————————————————————————— 令a = k * b + r; (k

Python案例 | 使用四阶龙格-库塔法计算Burgers方程

使用四阶龙格-库塔法计算Burgers方程 引言求解过程完整代码 引言 Burgers方程产生于应用数学的各个领域,包括流体力学、非线性声学、气体动力学和交通流。它是一个基本的偏微分方程,可以通过删除压力梯度项从速度场的Navier-Stokes方程导出。对于黏度系数较小的情况( ν = 0.01 / π \nu = 0.01/ \pi ν=0.01/π),Burgers方程会

强化学习深入学习(一):价值函数和贝尔曼方程

文章目录 0. 引言1. 回报(Return)2. 价值函数(Value Function)3. 贝尔曼期望方程(Bellman Expectation Equation)4. 贝尔曼最优方程(Bellman Optimality Equation)总结 0. 引言 强化学习(Reinforcement Learning, RL)是一种机器学习方法,通过与环境的交互来学习如何

数论 - n元线性同余方程的解法

note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念:   形如:(a1*x1+a2*x2+....+an*xn)%m=b%m           ..................(1) 当然也有很多变形,例如:a1*x1+a2*x2+...+an*xn+m*x(n+1)=b.这两个都是等价的。 判断是否有解:

logging输出日志在文件、控制台的格式设置

formatter = logging.Formatter(fmt=“%(asctime)s%(message)s”,datefmt=‘%Y-%m-%d %H:%M:%S’)fh.setFormatter(formatter)efh.setFormatter(formatter)stdout.setFormatter(formatter)stderr.setFormatter(format