codeforce 603B - Moodular Arithmetic
题意:给出方程 f(kx%p)=kf(x)%p ,f:A->B,不同的映射函数f有几种,其中f,A,B值域为{0,1,2..p-1},p为素数(除了2),k为小于p的一个常数。
思路:明显是求循环节的。
首先分析特殊情况:
k==0:f(x)=0.其余f(x)为值域中任何一个值,所以有p^(p-1)种;
k==1:f(x)=x.所以有p^(p)种;
其他:
若已知f(x)=n,则f(kx),f(k^2*x),f(k^3*x),...f(k^m*x)的值都求的出来;f(k^2*x%p)=k^2*f(x)%p=k*f(kx)%p;以此内推
当m到某个值时一定循环了,k^m=(同余)1%p;
转化成求m;
p^((p-1)/m);
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <bits/stdc++.h> 2 #include<cmath> 3 #include <iostream> 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <cmath> 8 typedef long long ll; 9 using namespace std; 10 11 const ll mod= 1e9+7; 12 13 ll pow1(ll x,ll n) 14 { 15 ll ret =1; 16 ll num =x; 17 while(n) 18 { 19 if(n&1) 20 { 21 ret*=num; 22 ret%=mod; 23 } 24 num*=num; 25 num%=mod; 26 n>>=1; 27 } 28 return ret; 29 } 30 int main() 31 { 32 int p,k; 33 while(~scanf("%d%d",&p,&k)) 34 { 35 if(k==0) 36 { 37 printf("%64d\n",pow1(p,p-1)); 38 continue; 39 } 40 if(k==1) 41 { 42 printf("%64d\n",pow1(p,p)); 43 continue; 44 } 45 ll temp; 46 temp=k; 47 int m; 48 for( m=1;m<p;m++) 49 { 50 if(temp==1) 51 { 52 break; 53 } 54 temp*=k; 55 temp%=p; 56 } 57 int x=ceil((p-1)*1.0/m); 58 printf("%64d\n",pow1(p,x)); 59 } 60 return 0; 61 }
View Code
转载于:https://www.cnblogs.com/ITUPC/p/5016416.html
codeforce 603B - Moodular Arithmetic相关推荐
- Arithmetic
前言 GitHub地址 合作伙伴:林奇凯 项目简介 Arithmetic是一个能够自动生成小学四则运算题目的命令行程序 项目需求 使用 -n 参数控制生成题目的个数,例如: Myapp.exe -n ...
- LeetCode 1027. Longest Arithmetic Sequence--笔试题--C++解法
LeetCode 1027. Longest Arithmetic Sequence–笔试题–C++解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专 ...
- 构造 HDOJ 5400 Arithmetic Sequence
题目传送门 题意:问有多少个区间,其中存在j使得ai + d1 == ai+1(i<j) && ai + d2 == ai+1 (i>j) 构造:用c1[i], c2[i] ...
- usaco Arithmetic Progressions
题意:给出n,m,其中n表示等差数列的长度,每项由a^2+b^2表示,其中a和b不超过m,要求输出满足条件的首项及等差 思路:先根据m,可以得到由[0,m]构成的a^2+b^2,最大的等差,然后根据首 ...
- LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告
1.题目大意 A sequence of number is called arithmetic if it consists of at least three elements and if th ...
- PAT甲级1088 Rational Arithmetic:[C++题解]分数的加减乘除
文章目录 题目分析 题目链接 题目分析 来源:acwing 加减乘除: ab+cd=ad+bcbd\frac{a}{b}+\frac{c}{d}=\frac{ad+bc}{bd}ba+dc=bda ...
- Modular Arithmetic 模算术
Modular Arithmetic 模算术 我们都见过时钟,在时钟上有12个刻度.假设某天晚上时针指向6的位置,那么它表示的是晚上六点钟,可是到了第二天早上,当时针再次指向6时,它表示的又是早上六点 ...
- boost::mpl模块实现arithmetic相关的测试程序
boost::mpl模块实现arithmetic相关的测试程序 实现功能 C++实现代码 实现功能 boost::mpl模块实现arithmetic相关的测试程序 C++实现代码 #include & ...
- Codeforce 水题报告(2)
又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...
最新文章
- MongoDb 查询时常用方法
- R语言parse函数、deparse函数、expression函数实现字符串和表达式的转换实战
- 浅谈Hive和HBase区别
- 2018.7.6 TX射频调试-PP
- 三十、Pyspider爬虫框架总结,爬取Scrapy文档
- CSS相邻同胞选择器
- Linux下的touch命令
- java牛顿法求方程根_快速求解方程的根——二分法与牛顿迭代法
- 中国计算机学会推荐国际学术会议和期刊目录(2015 年)
- 文件下载之断点续传(客户端与服务端的实现)
- 冰河的大学生活,两个好基友:二神和波妞,哈哈,挺有意思的
- 新房装修选怎中式装修是不是能省钱
- 概率论减法公式的证明
- 华为交换机导入配置_华为交换机通用配置方式方法
- Win10缺失.Net处理方案汇总
- 如何确定windows右下角弹出的窗口是哪个程序搞的鬼
- DOTA~杀人声音,英雄台词
- Android studio 报错Multiple annotations of type `dalvik.annotation.EnclosingClass`
- 来看看日式设计的7个版式技巧吸取灵感
- spring事物管理
热门文章
- ELF Format 笔记(十三)—— 段权限
- 最新黑链代码expression:隐藏链接代码
- [收集] C++ memset ,memcpy 和strcpy 的区别
- 思路:当一个表嵌套另一个表时候 只需在dao中引入该mapper即可 进行正常的数据插入 查询 修改等...
- List 的add()与addAll()的区别
- MyEclipse中jsp编码设置
- 字符串的操作方法(第二天)
- 转:Siri之父:语音交互或将主导未来十年发展
- GDOI2017第二轮模拟day1 总结
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码