题目:戳这里

学习博客:戳这里

欧拉函数的性质:

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

    Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新 ...

  2. ichartjs插件的使用

    项目中可能会用到饼状图.柱状图.环形图等,ichartjs是一个很不错的插件,体量小,只需引入ichart.1.2.1.min.js即可满足基础需求,github下载地址是:https://githu ...

  3. canvas星空背景特效+CSS旋转相册学习

    今天在看帖子的时候,看到了个有趣的css旋转相册,刚好之前做了一个星空背景dome,这里给大家分享下代码: 旋转相册参考:https://blog.csdn.net/gitchatxiaomi/art ...

  4. 计算机网络安全 —— 报文摘要算法 ME5 (三)

    一.报文摘要算法基本概念 使用加密通常可达到报文鉴别的目的,因为伪造的报文解密后一般不能得到可理解的内容.但简单采用这种方法,计算机很难自动识别报文是否被篡改.另外,对于不需要保密而只需要报文鉴别的网 ...

  5. UNIX DOMAIN SOCKETS IN GO unix域套接字

    Unix domain sockets in Go - Golang News https://golangnews.org/2019/02/unix-domain-sockets-in-go/ pa ...

  6. Page (computer memory) Memory segmentation Page table 虚拟地址到物理地址的转换

    A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...

  7. Feign配置日志的打印级别

    一.细粒度的配置Feign的日志级别(针对每个微服务配置) 1.java代码方式 (1)在Feign接口注解上面配置configuration /** * @author : maybesuch * ...

  8. loj10006数列分段

    题目描述 对于给定的一个长度为 N 的正整数数列 A,现要将其分成连续的若干段,并且每段和不超过 M(可以等于 M),问最少能将其分成多少段使得满足要求. 输入格式 第一行包含两个正整数 N,M表示了 ...

  9. 济南学习D3T1__线性筛和阶乘质因数分解

    [问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...

  10. 【Redis 分布式锁】(1)一把简单的“锁”

    原文链接:https://www.changxuan.top/?p=1230 在单体架构向分布式集群架构演进的过程中,项目中必不可少的一个功能组件就是分布式锁.在开发团队有技术积累的情况下,做为团队的 ...