码迷,mamicode.com
首页 > 其他好文 > 详细

count

时间:2018-10-23 21:09:01      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ace   img   nbsp   class   png   fine   .com   div   color   

技术分享图片

一个数在modP意义下有逆元当且仅当这个数与P互质,否则无论成什么数都不能成一

且逆元有且只有一个

所以只要统计P之前的(不含P)与P互质的数的个数 s

但因为有可能算两次,所以找出所有x*x=1(mod P) 个数是t

答案就是(s+t)/2

而这个P之前与P互质的数的个数就是欧拉函数

技术分享图片

分解质因数

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <string>
 4 #include <cmath>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <map>
 8 #include <set>
 9 #include <queue>
10 #include <vector>
11 using namespace std;
12 typedef long long ll;
13 typedef unsigned int uint;
14 typedef unsigned long long ull;
15 typedef pair<int, int> PII;
16 #define fi first
17 #define se second
18 #define MP make_pair
19 
20 ll read()
21 {
22     ll v = 0, f = 1;
23     char c = getchar();
24     while (c < 48 || 57 < c) {if (c == -) f = -1; c = getchar();}
25     while (48 <= c && c <= 57) v = (v << 3) + v + v + c - 48, c = getchar();
26     return v * f;
27 }
28 
29 int main()
30 {
31     freopen("count.in", "r", stdin);
32     freopen("count.out", "w", stdout);
33     ll n = read();
34     ll _n = n, phi = n;
35     for (ll i = 2; i * i <= _n; i++)
36         if (_n % i == 0)
37         {
38             phi = phi / i * (i - 1);
39             while (_n % i == 0)
40                 _n /= i;
41         }
42     if (_n > 1)
43         phi = phi / _n * (_n - 1);
44     ll s = 0;
45     for (ll i = 1; i < n; i++)
46         if (i * i % n == 1)
47             s++;
48     printf("%lld\n", (phi + s) / 2);
49 }

 欧拉定理求逆元

技术分享图片

 

count

标签:ace   img   nbsp   class   png   fine   .com   div   color   

原文地址:https://www.cnblogs.com/lcan/p/9838052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!