首页 > 其他分享 >[lnsyoj165/luoguP4139]上帝与集合的正确用法

[lnsyoj165/luoguP4139]上帝与集合的正确用法

时间:2024-07-28 18:17:41浏览次数:11  
标签:phi lnsyoj165 res luoguP4139 long 用法 int ans include

题意

\[2^{2^{2^{\cdots}}} \bmod p \]

的值

sol

高次幂算法,使用扩展欧拉定理降幂

\[a^p \equiv a^{p \bmod \phi(m) + \phi(m)}\pmod{m} (b \ge \phi(m)) \]

由于当 \(m=1\) 时,无论 \(a^p\) 取何值,结果均为 \(0\) ,因此递归计算即可

\(\phi\) 计算

由算数基本定理,得 $$n=\prod_{i=1}^k a_i^{p_i}$$
则 $$\phi(i) = n\cdot \prod_{i=1}^k \frac{a_i-1}{a_i}$$

代码

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

int eular(int x){
    int res = x;
    for (int i = 2; i <= x / i; i ++ ){
        if (x % i == 0){
            res = res / i * (i - 1);
            while (x % i == 0) x /= i;
        }
    }
    if (x > 1) res = res / x * (x - 1);
    return res;
}

int qpow(int a, int k, int p){
    int ans = 1;
    while (k){
        if (k & 1) ans = (long long) ans * a % p;
        a = (long long) a * a % p;
        k >>= 1;
    }
    return ans;
}

int solve(int p){
    if (p <= 2) return 0;
    int phi = eular(p);
    return qpow(2, phi + solve(phi), p);
}

int main(){
    int T;
    scanf("%d", &T);
    while (T -- ){
        int p;
        scanf("%d", &p);
        printf("%d\n", solve(p));
    }
}

标签:phi,lnsyoj165,res,luoguP4139,long,用法,int,ans,include
From: https://www.cnblogs.com/XiaoJuRuoUP/p/-/lnsyoj165_luoguP4139

相关文章

  • SQL多表查询-JOIN的用法
    假设有两张表:学生表students和课程表courses,现在要查询学生名和课程名。--students表+----+---------+-----------+|id|name|course_id|+----+---------+-----------+|1|Alice|1||2|Bob|2||3|Charlie|NULL|+......
  • tie的用法
    std::tie(it,dump)=m_parameterCache.insert({cacheKey,v2_params});其中tie的作用是什么在这段代码中,std::tie的作用是将多个返回值绑定到变量上,从而简化多返回值的处理。具体来说,这段代码使用std::tie将m_parameterCache.insert方法的返回值(一个std::pair)解包并绑......
  • com.github.yulichang.wrapper.MPJLambdaWrapper selectJoinOne用法
    selectJoinOne方法是mybatis-plus-join项目中的一个方法,用于实现单表查询并关联查询其他表的数据。以下是一个使用selectJoinOne的示例:假设我们有两个表:用户(User)和订单(Order),我们想要查询用户的详情,并且关联查询该用户的第一个订单。java//引入MPJLambdaWrapperimportc......
  • 【python学习】retry库用法大全!附示例代码
    Retry是一个用于Python的库,用于在函数调用失败时自动重试。它的目标是简化重试逻辑的编写,处理由于临时性问题(如网络故障、API限制等)导致的失败。Retry的主要特点包括:简单易用:只需使用装饰器或上下文管理器即可实现重试功能。灵活配置:可以配置重试次数、重试间隔、异常......
  • Python 中的正反斜杠用法详解
    在Python编程中,字符串是一个常用的数据类型,字符串中的斜杠(反斜杠\和正斜杠/)具有特殊的用法和意义,本文将介绍这两种斜杠的用法。一、反斜杠的转义作用在Python中,反斜杠(\)被称为转义字符,它常用于两个主要目的。1.引入特殊字符反斜杠可以用来引入特殊字符序列,这些序列在Py......
  • HTML里面table标签详细用法
    HTML中的<table>标签用于创建表格,其中包含了行(<tr>)和列(<td>或<th>)的组合。以下是`<table>`标签的详细用法:1.基本结构一个基本的HTML表格由<table>标签开始和结束。每个表格由一个或多个<tr>(tablerow,表格行)组成,而每个行又包含多个<td>(tabledata,表格数据)或<th>(tableheader,......
  • markdown命令基本用法
    Markdown学习1.标题(1-6个)+Space+标题内容的多少决定是几级标题2.字体Hello,world!斜体:*+内容+*Hello,world!加粗:**+内容+**Hello,world!斜体加粗:三个*+内容+三个*Hello,world!删除线:~~+内容+~~Hello,world!引用:>+内容3.分割线---或者***4.图片......
  • Git的一些基本用法
    本文分享自天翼云开发者社区《Git的一些基本用法》,作者:l****n基本操作gitbranch查看当前分支gitbranch-a查看所有分支gitpull更新当前分支gitcheckoutXXX切换到某分支gitcheckout.放弃所有更改gitlog--pretty=oneline查看当前分支的commitid(或者gitrev-......
  • getBoundingClientRect 和 IntersectionObserver 的区别和用法
    目录getBoundingClientRectIntersectionObservergetBoundingClientRectgetBoundingClientRect是一个DOMAPI方法,用于获取指定元素相对于视口的位置和尺寸信息。它返回一个DOMRect对象,包含了元素的左上角和右下角相对于视口的坐标。“图片懒加载”,这个词语想必大家再熟悉不......
  • Arrays.sort()与Collections.sort()的用法以及区别
    目录Arrays.sort()与Collections.sort()的区别对象数组的排序方式Arrays.sort()的方法1.Arrays.sort(int[]a)2.Arrays.sort(int[]a,intfromIndex,inttoIndex)3.Arrays.sort(Integer[]a,Comparatorcmp)Collections.sort()的方法1.sort(Listlist)2.sort(Listlist......