HDU 5278 PowMod 数论公式推导

题意:中文题自己看吧

分析:这题分两步

第一步:利用已知公式求出k;

第二步:求出k然后使用欧拉降幂公式即可,欧拉降幂公式不需要互质(第二步就是BZOJ3884原题了)

求k的话就需要构造了(引入官方题解)

然后就求出k了,我就很奇怪为什么是这个式子,然后就网上搜啊搜

找到了一个推导(看完了以后恍然大悟)

推导链接:http://blog.csdn.net/wust_zzwh/article/details/51966450

高度仰慕数学好的巨巨

吐槽:这个题n是无平方因子,然后就要往欧拉函数是积性函数的性质上想,但是主要是还是要多做数学题

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <math.h>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int N = 1e7+5;
const int mod=1e9+7;
bool check[N];
LL phi[N],prime[N>>1],tot;
LL sum[N],k,n,m,p;
LL qpow(LL a,LL b,LL mod){
  LL ret=1;
  while(b){
    if(b&1)ret=(ret*a)%mod;
    a=(a*a)%mod;
    b>>=1;
  }
  return ret;
}
void getphi(){
  phi[1]=1;tot=0;
  for(int i=2;i<=N-5;++i){
    if(!check[i]){
      prime[++tot]=i;
      phi[i]=i-1;
    }
    for(int j=1;j<=tot;++j){
      if(i*prime[j]>N-5)break;
      check[i*prime[j]]=true;
      if(i%prime[j]==0){
        phi[i*prime[j]]=phi[i]*prime[j];
        break;
      }
      else phi[i*prime[j]]=phi[i]*(prime[j]-1);
    }
  }
  for(int i=1;i<=N-5;++i){
    sum[i]=(sum[i-1]+phi[i])%mod;
  }
}
LL solve(LL n,LL m){
  if(m==0)return 0;
  if(m==1)return phi[n];
  if(n==1)return sum[m];
  if(phi[n]==n-1){
    return (phi[n]*solve(1,m)%mod+solve(n,m/n))%mod;
  }
  for(int i=1;i<=tot&&prime[i]*prime[i]<=n;++i){
    if(n%prime[i])continue;
    return (phi[prime[i]]*solve(n/prime[i],m)%mod+solve(n,m/prime[i]))%mod;
  }
}
LL f(LL x){
  if(x==1)return 0;
  return qpow(k,f(phi[x])+phi[x],x);
}
int main(){
  getphi();
  while(~scanf("%I64d%I64d%I64d",&n,&m,&p)){
    k=solve(n,m);
    printf("%I64d\n",f(p));
  }
  return 0;
}

时间: 2024-10-11 00:08:41

HDU 5278 PowMod 数论公式推导的相关文章

hdu 4196(数论)

题意:问小于n的数的乘积能拼成的最大平方数是多少? 思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆. 代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-06-28 15:26 5 * Fi

hdu 5278 YJC plays automaton

YJC plays automaton Accepts: 1 Submissions: 14 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 524288/262144 K (Java/Others) 问题描述 YJC是个小火车老司机,所以他是袜子坊烧饼栏目举办的"吃的更圆"竞赛金牌获得者,他去吃特色菜时看到一个n+1个状态的自动机,编号为0到n,其中0号点表示NULL,他非常好奇于是开始了研究: 他选取了一个初始状态集合S,

hdu GuGuFishtion 6390 数论 欧拉函数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6390 直接开始证明: 我们设--------------.....-...............-----...(1) 则-................................-.-(2) 为什么是这样呢,因为我们知道 同理得到b的分解和的分解 我们会发现,虽然a和b的分解里可以有相等的部分,但是在里的也就是我们假设为的部分是不会有重复的,那么要由*得出也就是要去除重复部分,的重复部分就是

HDU 5728 - PowMod

题意:    定义: k = ∑(i=1,m) φ(i∗n) mod 1000000007 给出: n,m,p ,且 n 无平方因子 求: ans= k^(k^(k...k)) mod p  (k有无限个)    分析: 欧拉函数 + 指数循环节        第一部分 求出 k.        定理: 1.欧拉函数是非完全积性函数: φ(m*n) = φ(n)*φ(m) , 当且仅当GCD(n,m) = 1.        应用:            ∑(i=1,m)φ(i*n) = φ(p

HDU 1495 非常可乐(数论,BFS)

非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14153    Accepted Submission(s): 5653 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定

hdu 5072 Coprime(数论)

题目链接:hdu 5072 Coprime 题目大意:给定N个数,问能选出多少个3元组,要么[(a, b) = (b, c) = (a, c) = 1] or [(a, b) ≠ 1 and (a, c) ≠ 1 and (b, c) ≠ 1]. 解题思路:这题可以换个角度想,可以将三个数看做三角形的三条边,互质即边的颜色为1,否则为0,那么要求的即为 三条边颜色相同的三角形有多少个. 总的三角形的个数可求,那么如果求出三条边不完全相同的三角形个数,相减一下即可. 枚举顶点,然后确定以该点形成的

HDU 1722 Cake (数论 gcd)(Java版)

Big Number 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1722 --每天在线,欢迎留言谈论. 题目大意: 给你两个数 n1,n2 . 然后你有一块蛋糕,提前切好,使得不管来 n1 还是 n2 个人都能够当场平均分配. 求 "提前切好" 的最小蛋糕块数. 知识点: (请无视)公式:N = a + b + gcd(a, b) : 思路: (勿无视)先份成p块,然后再拼到一起,再从原来开始的地方,将蛋糕再分成q份,中间肯定会出现完

hdu-5728 PowMod(数论)

题目链接: PowMod Time Limit: 3000/1500 MS (Java/Others)     Memory Limit: 262144/262144 K (Java/Others) Problem Description Declare:k=∑mi=1φ(i∗n) mod 1000000007 n is a square-free number. φ is the Euler's totient function. find:ans=kkkk...k mod p There a

HDU 11124 Factorial (数论)

Factorial Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2807    Accepted Submission(s): 1804 Problem Description The most important part of a GSM network is so called Base Transceiver Station