题目:戳这里

学习博客:戳这里

欧拉函数的性质:

① N是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)

② 除了N=2,φ(N)都是偶数.

③ 小于N且与N互质的所有数的和是φ(n)*n/2。

④ 欧拉函数是积性函数——若m,n互质,φ(m*n)=φ(m)*φ(n)。

⑤ 当N为奇数时,φ(2*N)=φ(N)

⑥ 若N是质数p的k次幂,φ(N)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟N互质。

⑦ 当N是质数时,φ(N) = N-1

广义欧拉定理:

题意和解题思路见上面的学习博客

重点图:

 

通过这题的计算我们可以发现,对于任何模的欧拉降幂都是可以直接预处理的。

因为phi(1) = 1,而1e9 + 7递归求的phi才28个。

  1. 1 #include<iostream>
  2. 2 #include<algorithm>
  3. 3 #include<stdio.h>
  4. 4 #include<string.h>
  5. 5 #include<string>
  6. 6 #include <cmath>
  7. 7 using namespace std;
  8. 8 typedef long long ll;
  9. 9 const ll mod = 1e9 + 7;
  10. 10 const int maxn = 2e5 + 10;
  11. 11 char s[maxn];
  12. 12 ll qmul(ll a, ll b, ll m)
  13. 13 {
  14. 14 ll ans = 0;
  15. 15 while(b)
  16. 16 {
  17. 17 if(b & 1)
  18. 18 ans = (ans + a) % m;
  19. 19 b >>= 1;
  20. 20 a = (a + a) % m;
  21. 21 }
  22. 22 return ans;
  23. 23 }
  24. 24 ll qmod(ll a, ll b, ll m)
  25. 25 {
  26. 26 ll ans = 1;
  27. 27 while(b)
  28. 28 {
  29. 29 if(b & 1)
  30. 30 ans = qmul(ans, a, m) % m;
  31. 31 b >>= 1;
  32. 32 a = qmul(a, a, m) %m;
  33. 33 }
  34. 34 return ans;
  35. 35 }
  36. 36 ll phi(ll x)
  37. 37 {
  38. 38 ll i, res = x;
  39. 39 for(i = 2; i < sqrt(x * 1.0) + 1; ++i)
  40. 40 {
  41. 41 if(!(x % i))
  42. 42 {
  43. 43 res = res / i * (i - 1);
  44. 44 while(!(x % i))
  45. 45 {
  46. 46 x /= i;
  47. 47 }
  48. 48 }
  49. 49 }
  50. 50 if(x > 1)
  51. 51 res = res / x * (x - 1);
  52. 52 return res;
  53. 53 }
  54. 54 ll p[33];
  55. 55 int main()
  56. 56 {
  57. 57 p[0] = p[1] = mod;
  58. 58 int cnt = 0;
  59. 59 for(int i = 2;; ++i)
  60. 60 {
  61. 61 p[i] = phi(p[i - 1]);
  62. 62 if(p[i] == 1)
  63. 63 {
  64. 64 cnt = i;
  65. 65 break;
  66. 66 }
  67. 67 }
  68. 68 int t;
  69. 69 scanf("%d", &t);
  70. 70 while(t--)
  71. 71 {
  72. 72 int n;
  73. 73 scanf("%s", s);
  74. 74 n = strlen(s);
  75. 75 int num = 0;
  76. 76 int pos = 0;
  77. 77 for(int i = n - 1; i >= 0; --i)
  78. 78 {
  79. 79 if(s[i] == '2')
  80. 80 ++num;
  81. 81 if(num == 28)
  82. 82 {
  83. 83 pos = i;
  84. 84 break;
  85. 85 }
  86. 86
  87. 87 }
  88. 88 ll ans = 0;
  89. 89 ++num;
  90. 90 for(int i = pos; i < n; ++i)
  91. 91 {
  92. 92 if(s[i] == '0')
  93. 93 ans = (ans + 1) % p[num];
  94. 94 if(s[i] == '1')
  95. 95 ans = (2 * ans % p[num] + 2 % p[num]) % p[num];
  96. 96 if(s[i] == '2')
  97. 97 {
  98. 98 --num;
  99. 99 ans = (3 % p[num] * qmod(2, ans + 1, p[num])) % p[num];
  100. 100 ans = (ans % p[num] - 3 + p[num]) % p[num];
  101. 101 }
  102. 102 }
  103. 103 printf("%lld\n", ans % mod);
  104. 104 }
  105. 105
  106. 106 }

牛客网多校第4场 A.Ternary String 【欧拉降幂】的更多相关文章

  1. 牛客网多校第3场Esort string (kmp)

    链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...

  2. 牛客网多校第3场C-shuffle card 平衡树或stl(rope)

    链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...

  3. 牛客网多校赛第九场A-circulant matrix【数论】

    链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  4. 牛客网多校训练第二场D Kth Minimum Clique

    链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...

  5. 牛客网多校第5场 H subseq 【树状数组+离散化】

    题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...

  6. 牛客网多校第5场 I vcd 【树状数组+离散化处理】【非原创】

    题目:戳这里 学习博客:戳这里 作者:阿狸是狐狸啦 n个点,一个点集S是好的,当且仅当对于他的每个子集T,存在一个右边无限延长的矩形,使的这个矩形包含了T,但是和S-T没有交集. 求有多少个这种集合. ...

  7. 牛客网多校第4场 J Hash Function 【思维+并查集建边】

    题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...

  8. 2018牛客网暑期ACM多校训练营(第四场) A - Ternary String - [欧拉降幂公式][扩展欧拉定理]

    题目链接:https://www.nowcoder.com/acm/contest/142/A 题目描述 A ternary string is a sequence of digits, where ...

  9. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)

    链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...

随机推荐

  1. 把vscode打造成技术写作神器

    作为技术开发,大家平时肯定需要记录技术笔记.甚至有的同学还开通可自己的技术博客或者技术公众号进行创作. 这个时候有套趁手的写作工具尤为重要,节省下时间好好休息一下,对于咱们程序员来说更加重要.因为最近 ...

  2. 图解 | 原来这就是TCP

    你是一台电脑,你的名字叫 A 经过<图解 | 原来这就是网络>这篇文章中的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你 ...

  3. gRPC Load Balancing

    gRPC Load Balancing 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务 ...

  4. (008)每日SQL学习:Oracle Not Exists 及 Not In 使用

    今天遇到一个问题,not in 查询失效,我以为是穿越了,仔细查了点资料,原来理解有误! select value from temp_a a where a.id between 1 and 100 ...

  5. Transformation-Based Error-Driven Learning and Natural Language Processing: A Case Study in Part-of-Speech Tagging

    http://delivery.acm.org/10.1145/220000/218367/p543-brill.pdf?ip=116.30.5.154&id=218367&acc=O ...

  6. Centos虚拟机上安装部署Tenginx,以及部署过程中遇到的问题

    Tenginx下载网址: Tenginx 官网地址:http://tengine.taobao.org/ Tenginx的官方网址中可以阅读Nginx的文档,可以选择中文进行阅读.下载Tengine- ...

  7. 在Centos7上安装Python+Selenium+Chrome+Chromedriver

    1.下载Chrome 上一篇文章已经演示过了Python+Selenium+Firefox+Geckodriver安装步骤并通过自动化脚本打开百度 因此当前只需要安装Chrome和Chromedriv ...

  8. SparkMLlib—协同过滤之交替最小二乘法ALS原理与实践

    SparkMLlib-协同过滤之交替最小二乘法ALS原理与实践 一.Spark MLlib算法实现 1.1 显示反馈 1.1.1 基于RDD 1.1.2 基于DataFrame 1.2 隐式反馈 二. ...

  9. ACM-古老的密码(排序qsort)

    古老的密码 题目描述:给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同例如,JWPUDJSTVP重排后可以得到WJD ...

  10. 黑客练手入门| pwnable.kr—幼儿瓶—01:fd

    目录 前言 pwnable.kr介绍 该怎么玩 幼儿瓶第一道题:fd 0x00 问题描述 0x01 源码分析 0x02 解题方法 0x03 知识点总结 前言 担心有人不知道pwnable.kr是什么, ...