zoukankan      html  css  js  c++  java
  • HDU 2619 完全剩余类 原根

    求有多少$i(<=n-1)$,使 $x^i  mod n$的值为$[1,n-1]$,其实也就是满足完全剩余类的原根数量。之前好像在二次剩余的讲义PPT里看到这个过。

    直接有个定理,如果模k下有原根,那么其原根总数为$varphi(varphi(k))$

    /** @Date    : 2017-09-21 19:22:16
      * @FileName: HDU 2619 原根 完全剩余类.cpp
      * @Platform: Windows
      * @Author  : Lweleth (SoungEarlf@gmail.com)
      * @Link    : https://github.com/
      * @Version : $Id$
      */
    #include <bits/stdc++.h>
    #define LL long long
    #define PII pair<int ,int>
    #define MP(x, y) make_pair((x),(y))
    #define fi first
    #define se second
    #define PB(x) push_back((x))
    #define MMG(x) memset((x), -1,sizeof(x))
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;
    
    const int INF = 0x3f3f3f3f;
    const int N = 1e5+20;
    const double eps = 1e-8;
    
    LL pri[N];
    int vis[N];
    int c = 0;
    
    void prime()
    {
    	MMF(vis);
    	for(int i = 2; i < N; i++)
    	{
    		if(!vis[i]) pri[c++] = i;
    		for(int j = 0; j < c && i * pri[j] < N; j++)
    		{
    			vis[i * pri[j]] = 1;
    			if(i % pri[j] == 0)	 break;
    		}
    	}
    }
    
    LL get_phi(LL x)
    {
    	LL res = x;
    	for(LL i = 0; i < c && pri[i] <= x / pri[i]; i++)
    	{
    		if(x % pri[i] == 0)
    		{
    			while(x % pri[i] == 0)
    				x /= pri[i];
    			res = res / pri[i] * (pri[i] - 1);
    		}
    	}
    	if(x > 1)
    		res = res / x * (x - 1);
    	return res;
    }
    
    int main()
    {
    	prime();
    	LL n;
    	while(cin >> n) cout << get_phi(get_phi(n)) << endl;
        return 0;
    }
    //https://zh.wikipedia.org/wiki/%E5%8E%9F%E6%A0%B9
    //对正整数 {displaystyle (a,m)=1} (a,m)=1,
    //如果 a 是模 m 的原根,那么 a 是整数模m乘法群(即加法群 Z/mZ 的可逆元,
    //也就是所有与 m 互素的正整数构成的等价类构成的乘法群)Zm×的一个生成元。
    //由于Zm×有 {displaystyle varphi (m)} varphi (m)个元素,
    //而它的生成元的个数就是它的可逆元个数,即 {displaystyle varphi (varphi (m))} varphi (varphi (m))个,
    //因此当模 {displaystyle m} m有原根時,它有 {displaystyle varphi (varphi (m))} varphi (varphi (m))個原根。
    
  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/7570672.html
Copyright © 2011-2022 走看看