题意:给出方程 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);

 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相关推荐

  1. Arithmetic

    前言 GitHub地址 合作伙伴:林奇凯 项目简介 Arithmetic是一个能够自动生成小学四则运算题目的命令行程序 项目需求 使用 -n 参数控制生成题目的个数,例如: Myapp.exe -n ...

  2. LeetCode 1027. Longest Arithmetic Sequence--笔试题--C++解法

    LeetCode 1027. Longest Arithmetic Sequence–笔试题–C++解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专 ...

  3. 构造 HDOJ 5400 Arithmetic Sequence

    题目传送门 题意:问有多少个区间,其中存在j使得ai + d1 == ai+1(i<j) && ai + d2 == ai+1 (i>j) 构造:用c1[i], c2[i] ...

  4. usaco Arithmetic Progressions

    题意:给出n,m,其中n表示等差数列的长度,每项由a^2+b^2表示,其中a和b不超过m,要求输出满足条件的首项及等差 思路:先根据m,可以得到由[0,m]构成的a^2+b^2,最大的等差,然后根据首 ...

  5. 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 ...

  6. PAT甲级1088 Rational Arithmetic:[C++题解]分数的加减乘除

    文章目录 题目分析 题目链接 题目分析 来源:acwing 加减乘除: ab+cd=ad+bcbd\frac{a}{b}+\frac{c}{d}=\frac{ad+bc}{bd}ba​+dc​=bda ...

  7. Modular Arithmetic 模算术

    Modular Arithmetic 模算术 我们都见过时钟,在时钟上有12个刻度.假设某天晚上时针指向6的位置,那么它表示的是晚上六点钟,可是到了第二天早上,当时针再次指向6时,它表示的又是早上六点 ...

  8. boost::mpl模块实现arithmetic相关的测试程序

    boost::mpl模块实现arithmetic相关的测试程序 实现功能 C++实现代码 实现功能 boost::mpl模块实现arithmetic相关的测试程序 C++实现代码 #include & ...

  9. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

最新文章

  1. MongoDb 查询时常用方法
  2. R语言parse函数、deparse函数、expression函数实现字符串和表达式的转换实战
  3. 浅谈Hive和HBase区别
  4. 2018.7.6 TX射频调试-PP
  5. 三十、Pyspider爬虫框架总结,爬取Scrapy文档
  6. CSS相邻同胞选择器
  7. Linux下的touch命令
  8. java牛顿法求方程根_快速求解方程的根——二分法与牛顿迭代法
  9. 中国计算机学会推荐国际学术会议和期刊目录(2015 年)
  10. 文件下载之断点续传(客户端与服务端的实现)
  11. 冰河的大学生活,两个好基友:二神和波妞,哈哈,挺有意思的
  12. 新房装修选怎中式装修是不是能省钱
  13. 概率论减法公式的证明
  14. 华为交换机导入配置_华为交换机通用配置方式方法
  15. Win10缺失.Net处理方案汇总
  16. 如何确定windows右下角弹出的窗口是哪个程序搞的鬼
  17. DOTA~杀人声音,英雄台词
  18. Android studio 报错Multiple annotations of type `dalvik.annotation.EnclosingClass`
  19. 来看看日式设计的7个版式技巧吸取灵感
  20. spring事物管理

热门文章

  1. ELF Format 笔记(十三)—— 段权限
  2. 最新黑链代码expression:隐藏链接代码
  3. [收集] C++ memset ,memcpy 和strcpy 的区别
  4. 思路:当一个表嵌套另一个表时候 只需在dao中引入该mapper即可 进行正常的数据插入 查询 修改等...
  5. List 的add()与addAll()的区别
  6. MyEclipse中jsp编码设置
  7. 字符串的操作方法(第二天)
  8. 转:Siri之父:语音交互或将主导未来十年发展
  9. GDOI2017第二轮模拟day1 总结
  10. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码