N次剩余 (hdu 3930)

news/2024/11/23 16:30:22/
N次剩余 (hdu 3930)

任务:
给定N, a, p, 求出(x^N)%p=a 在模p意义下的所有解x。
说明:
令g为p的原根,因为p为素数,所以phi(p)=p-1。
由原根的性质得:
如果g为p的原根,则:g^i mod p != g^j mod p (p为素数), 其中i != j且i, j介於1至(p-1)之间
所以,可以设g^y=x, g^t=a,则有:
g^(y*N)%p=g^t
又由原根的性质:
g^(y*N)%p=g^t -> (y*N)%(p-1)=t (此方程可以由拓展欧几里得解)
另外g^t=a可以由离散对数求出

题目:hdu 3930
题意:
给定newx, k, m, 方程 (x^k)%m=newx, 求在模m意义下的所有解x。
限制:
0 <= newx, m, k <= 1.5*10^15; m是素数。

/*hdu 3930
题意:
给定newx, k, m, 方程 (x^k)%m=newx, 求在模m意义下的所有解x。
限制:
0 <= newx, m, k <= 1.5*10^15; m是素数。
思路:
N次剩余
*/
#include #include #include #include #include #include using namespace std; #define LL __int64 #define PB push_back LL mul(LL a,LL b,LL m){ LL ret = 0; a %= m; while(b){ if(b & 1) ret = (ret + a) % m; a = (a + a) % m; b >>= 1; } return ret; } LL a_b_MOD_c(LL a,LL b,LL m){ LL ret = 1; a %= m; while(b){ if(b&1) ret = mul(ret,a,m); a = mul(a,a,m); b >>= 1; } return ret; } LL ext_gcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1, y=0; return a; } LL ret= ext_gcd(b,a%b,y,x); y-= a/b*x; return ret; } vector a; bool g_test(LL g,LL p){ for(LL i=0;i < m; 否则按题意自己转化。 //复杂度O(sqrt(m)) LL log_mod(LL a, LL b, LL m){ hs.init(); LL s = ceil(sqrt(m + 0.5)); LL cur = 1; for (int i = 0; i < s; ++i){ if(hs.find(cur)==-1) hs.insert(cur,i); //记得先判重,在插入 cur = cur * a % m; } LL v = a_b_MOD_c(a, (m - s - 1 + m) % m, m); for(int i = 0; i < s; ++i){ LL tmp = hs.find(b); if(tmp!=-1) return s * i + tmp; b=b*v%m; } return -1; } /*n次剩余 任务: 给定N, a, p, 求出(x^N)%p=a 在模p意义下的所有解x。 说明: 令g为p的原根,因为p为素数,所以phi(p)=p-1。 由原根的性质得: 如果g为p的原根,则:g^i mod p != g^j mod p (p为素数), 其中i != j且i, j介於1至(p-1)之间 所以,可以设g^y=x, g^t=a,则有: g^(y*N)%p=g^t 又由原根的性质: g^(y*N)%p=g^t -> (y*N)%(p-1)=t (此方程可以由拓展欧几里得解) 另外g^t=a可以由离散对数求出 */ vector residue(LL p, LL N, LL a){ LL g = pri_root(p); g %= p; LL m = log_mod(g, a, p); vector ret; if(a == 0){ ret.PB(0); return ret; } if(m == -1) return ret; LL A = N, B = p - 1, C = m, x, y; LL d = ext_gcd(A, B, x, y); if(C % d != 0) return ret; x = x * (C / d) % B; LL delta = B / d; for(int i = 0; i < d; ++i){ x = ((x + delta) % B + B) % B; ret.PB(a_b_MOD_c(g, x, p)); } sort(ret.begin(), ret.end()); ret.erase(unique(ret.begin(), ret.end()), ret.end()); return ret; } int main(){ int cas = 0; LL k,m,newx; while(scanf("%I64d%I64d%I64d",&k, &m, &newx)!=EOF){ vector ans; ans = residue(m,k,newx); printf("case%d:\n",++cas); if(ans.size()==0) puts("-1"); for(int i = 0; i < ans.size(); ++i) printf("%I64d\n",ans[i]); } return 0; } 



http://www.ppmy.cn/news/142803.html

相关文章

急!sql205 消息 3930,级别 16,状态 1

消息 3930&#xff0c;级别 16&#xff0c;状态 1&#xff0c;过程 TRI_FC_TB_CK_HG&#xff0c;第 53 行 当前事务无法提交&#xff0c;而且无法支持写入日志文件的操作。请回滚该事务。 语句已终止。 来自 “ ITPUB博客 ” &#xff0c;链接&#xff1a;http://blog.itpub.ne…

MQTT:用Mosquitto搭建轻量级的设备接入网关

开发部署在云端的设备接入网关服务就不得不提到MQTT&#xff0c;使用MQTT不论是从设备到设备&#xff0c;还是设备到云端服务的双向通讯&#xff0c;都可以获得较好的支持。 MQTT的起源和我的理解 用tcpdump分析下MQTT的通讯时序 这里基于mosquitto&#xff0c;以一组实际的订…

ora-39142,ora-39001,ora-39000

在从11.2数据库数据转到11.1时出现如下错误 impdp username/password directorydata_pump_dir dumpfile*.dmp fully ora-39001: 参数值无效 ora-3900: 转储文件说明错误 ora-39142: 版本号3.1(......)不兼容 是因为从高版本到低版本&#xff0c;不兼容导至的。 只需要在源端 11…

12c导库ORA-39002 ORA-39070 ORA-39087

在为12c导库时&#xff0c;遇到了一下问题&#xff1a; ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ORA-39087: 目录名DMP无效 我的导入语句是这样写的 nohup impdp system/oracle directorydmp schemasGEN dumpfileGEN%U.DUMP logfileimp_gen_full.log parallel4 …

BZOJ 3930 CQOI2015 选数 莫比乌斯反演

题目见 http://pan.baidu.com/s/1o6zajc2 此外不知道H-L<10^5这个条件是干嘛的。。。。 #include <map> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 10001000 #define INF 0x3f3f3f3f #defin…

超好用的Excel异步导出功能

之前也做过关于Excel的导出案例&#xff0c;此次也是在其基础上进行改造升级&#xff1a; https://www.bilibili.com/video/BV1kf4y1i761?p5 但是之前的导出存在这么几个问题&#xff1a; 如果是数据量很大容易导致页面卡死&#xff08;我曾导出30w条数据&#xff0c;直接…

POJ3970

派对 时间限制&#xff1a; 1000MS 内存限制&#xff1a; 65536K 提交总数&#xff1a; 4395 接受&#xff1a; 1639 描述 ACM&#xff08;密码小牛协会&#xff09;组织的 CEO 已邀请他的所有团队参加年度全体会议&#xff0c;作为一个非常有纪律的人&#xff0c;CEO 决定给第…

使用openssl命令加解密 aes-128-cbc的简单示例

网上找了下openssl 加解密 aes-128-cbc相关命令, 发现都比较含糊, 这里是摸索出的一个aes-12b-cbc加解密的实例. 将要加密的内容输入到plain.txt echo "1234567890abc" > plain.txt 使用openssl加密. -p 表示打印出加密用的salt, key, iv. salt就是所谓的加盐, 防…