首页 > 其他分享 >P4139(扩展欧拉定理的应用)

P4139(扩展欧拉定理的应用)

时间:2023-07-12 09:46:32浏览次数:42  
标签:cout int 定理 扩展 P4139 include 欧拉

欧拉定理及扩展

题意:求

1

思路:

运用扩展欧拉定理进行欧拉降幂:
1
然后递归求解即可。

AC代码:

// -----------------
//#pragma GCC optimize(2)
#include <iostream>
#include <cstring>
#include <algorithm>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
#define fixed fixed<<setprecision
#define endl '\n'
#define int long long 
using namespace std;

const int N = 1e7 + 7;

int mod, p;
int primes[N], cnt, phi[N];
bool st[N];

int qmi(int a, int k, int p) 
{
    int res = 1 % p;
    while (k)
    {
        if (k & 1) res = res * a % p;
        a = a * a % p;
        k >>= 1;
    }
    return res;
}

void init(int n)  // 预处理欧拉函数
{
    phi[1] = 1;
    for(int i = 2; i <= n; i ++)
    {
        if(!st[i]) primes[ ++cnt] = i,phi[i] = i - 1;
        for(int j = 1; j <= cnt && i * primes[j] <= n; j ++)
        {
            st[i * primes[j]] = true;
            if(i % primes[j] == 0)
            {
                phi[i * primes[j]] = phi[i] * primes[j];
                break;
            }
            phi[i * primes[j]] = phi[i] * (primes[j] - 1);
        }
    }
}

int dfs(int a, int p)  // 递归求解
{
    if(p == 1) return 0;
    return qmi(a, dfs(a, phi[p]) + phi[p], p);
}

void solve()
{
    cin >> p;
    mod = p;
    int ans = dfs(2, p);
    cout << ans << endl;
}

signed main()
{
    IOS init(N - 7); 
    int T = 1;
    cin >> T;
    while(T --) { solve(); }
    return 0;
}

标签:cout,int,定理,扩展,P4139,include,欧拉
From: https://www.cnblogs.com/liqs2526/p/17546614.html

相关文章

  • 二项式定理和杨辉三角
     杨辉三角解法1:dfs使用记忆化搜索,提升dfs效率代码:intdfs(intn,intm){ if(!m)returnc[n][m]=1; if(m==1)returnc[n][m]=n; if(c[n][m])returnc[n][m]; if(n-m<m)m=n-m; returnc[n][m]=(dfs(n-1,m)+dfs(n-1,m-1))%mod;}解法2:递推时间复杂度O(n^2),如果......
  • 【模板】唯一分解定理
    问题描述任何大于\(1\)的正整数都能唯一分解为有限个质数的乘积:          \(N=p_1^{c_1}p_2^{c_2}...p_k^{c_k}\)其中\(p_1,p_2,\dots,p_k\)从小到大排列输入数据      一个数\(n(n\le10^{17})\)输出数据      将其质因数与其次数顺序输出   ......
  • 立体几何八大定理
    线面平行判定定理:平面外一条直线与平面内一条直线平行,则这条直线和这个平面平行。符号语言:\[a\not\subset\alpha,b\subset\alpha,a/\kern-0.10em/b\Longrightarrowa/\kern-0.10em/\alpha\]性质定理:一条直线和平面平行,经过这条直线的平面这这个平面相交,那么这条直线和交......
  • 【补】托勒密定理
    托勒密定理定理内容在数学中,托勒密定理是欧几里得几何学中的一个关于四边形的定理。托勒密定理指出凸四边形两组对边乘积之和不小于两条对角线的乘积,等号当且仅当四边形为圆内接四边形,或退化为直线取得(这时也称为欧拉定理)。狭义的托勒密定理也可以叙述为:圆内接凸四边形两对对边......
  • 欧拉-拉格朗日方程
    对于形如 的泛函,总有f(x0)使得A(f)最小,且此时有 称之为欧拉-拉格朗日方程 L对其自变量求导,代入欧拉-拉格朗日方程和L(x,f(x),f'(x)),得到f'(x)的表达式或方程,进而得到f(x)的表达式 总结:对于实际问题对应成A(f),得到对应的欧拉-拉格朗日方程,进而得出使A(f)取得极值的f......
  • 欧拉函数
     欧拉函数的原式是φ(n)=Σ[gcd(i,n)=1],它是一种积性函数,他符合:设p,q是互素的正整数,φ(pq)=φ(p)φ(q)欧拉函数定理1:设p,q是互素的正整数,φ(pq)=φ(p)φ(q)欧拉函数定理2:n=Σφ(d)欧拉函数定理3:φ(n)=nΠ(1-1/pi)他最早应用在密码学中下面给出求法之一试除法的代码,时间复杂度......
  • Lucas 定理
    Lucas定理若\(p\)是质数,则对于任意整数\(1\leqm\leqn\),有:\[\dbinom{n}{m}\equiv\dbinom{n\modp}{m\modp}\times\dbinom{\dfrac{m}{p}}{\dfrac{n}{p}}\pmodp\]证明太难,略。例题\(1\):SP18878题目大意求杨辉三角第\(n\)行中偶数个数与奇数个数。题目分析我们......
  • 威尔逊定理
     威尔逊定理:若p为素数,则p可以整除(p-1)!+1例题1:hdu5391直接套用威尔逊定理,注意n=4的结果是2代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e9+39+7;llquickPow(lla,llb,llm){ llans=1; while(b){ if(b&1)ans=(ans*a)%m......
  • 欧拉回路
    定义欧拉通路:能一次性走完一张图上所有的边,且每条边只经过一次欧拉回路:能一次性走完一张图上所有的边,每条边只经过一次,且这条路径构成一个回路(即最终回到了出发点)欧拉回路必须满足的条件:无向图:度数为奇数的点的个数==0或者==2(==0:欧拉回路,==2:欧拉通路)有向图:除了......
  • Arrangement排列•Combination组合•Counting计数•Binomial Theorem二项式定理
    符号C-Combination组合数[1]A-Arrangement(旧教材为P-Permutation)N-Number元素的总个数(自然数集合).M-参与选择的元素个数(M不大于N,两者都是自然数集合).!-Factorial阶乘.Arrangement排列与Combination组合:注意:n,m都是自然数,且m<=n,下同.排列的定义:从n......