HDU 5728 (尤拉函式)
超級冪的弱化版本這裡
然後就是把底數k求出來,假設p是n的一個質因數,因為n無平方因子,所以gcd(n,pn)=1 ,所以可以得到f(n,m)=∑i=1mϕ(i×n)=ϕ(p)∑i=1&&i%p≠0mϕ(i×np)+∑i=1mpϕ(i×p×n)=ϕ(p)∑i=1&&i%p≠0mϕ(i×np)+p∑i=1mpϕ(i×n)=ϕ(p)∑i=1&&i%p≠0mϕ(i×np)+(ϕ(p)+1)∑i=1mpϕ(i×n)=ϕ(p)∑i=1mϕ(i×np)+∑i=1mpϕ(i×n)=ϕ(p)f(np,m)+f(n,mp)
接下來就暴力遞迴。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <map>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
#define maxn 10050000
#define mod 1000000007
bool vis[maxn];
int phi[maxn], prime[maxn], cnt, sum[maxn];
int fac[maxn];//每一個數的一個素因子
void init () {
cnt = 0;
memset (vis, 0, sizeof vis);
phi[1] = 1;
for (int i = 2; i < maxn; i++) {
if (!vis[i]) {
prime[cnt++] = i;
fac[i] = i;
phi[i] = i-1;
}
for (int j = 0; j < cnt; j++) {
if (1LL*i*prime[j] >= maxn) break ;
vis[i*prime[j]] = 1;
fac[i*prime[j]] = prime[j];
if (i%prime[j] == 0) {
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
else {
phi[i*prime[j]] = phi[i] * (prime[j]-1);
}
}
}
sum[0] = 0;
for (int i = 1; i < maxn; i++) {
sum[i] = sum[i-1]+phi[i];
sum[i] %= mod;
}
}
long long n, m, p, k;
long long qpow (long long a, long long b, int p) {
if (b == 0)
return 1%p;
long long ans = qpow (a, b>>1, p);
ans = ans*ans%p;
if (b&1)
ans = ans*a%p;
return ans;
}
long long cal (int n, int m) {
if (!n || !m)
return 0;
if (n == 1)
return sum[m];
if (m == 1)
return phi[n];
return (1LL*phi[fac[n]] * cal (n/fac[n], m) % mod + cal (n, m/fac[n])) % mod;
}
long long solve (int p) {
if (p == 1)
return 0;
long long ans = solve (phi[p]);
ans += phi[p];
return qpow (k, ans, p);
}
int main () {
init ();
while (scanf ("%lld%lld%lld", &n, &m, &p) == 3) {
k = cal (n, m);
printf ("%lld\n", solve (p));
}
return 0;
}
相關推薦
HDU 5728 (尤拉函式)
超級冪的弱化版本這裡 然後就是把底數k求出來,假設p是n的一個質因數,因為n無平方因子,所以gcd(n,pn)=1,所以可以得到f(n,m)=∑i=1mϕ(i×n)=ϕ(p)∑i=1&am
GuGuFishtion(hdu 6390 尤拉函式+莫比烏斯函式)
題目: 題意: 設 ,已知m,n,p,求 。 思路: 尤拉函式性質: (p為質數)。 一個數肯定能表示成若干個質數的乘積,因此,設。 (其餘的項上下展開後都可以約掉,因為它們互質) 設 。 設 設
hdu 6390 (尤拉函式+莫比烏斯反演)
給出一個表示式 求解 首先,設p為a,b共同的質因數 phi(n) = p^α = (p-1)*p^(α-1) phi(ab) = (p-1)*p^(α1+α2-1) phi(a) = (p-1)*p^(α1-1) phi(b) = (p-1)*p^(α2-
【hdu 5728 PowMod】【數論】【尤拉函式】【尤拉降冪遞迴取模】【尤拉積性函式】
【連結】 http://acm.hdu.edu.cn/showproblem.php?pid=5728 【題意】 n是無平方因子的數 定義k=∑mi=1φ(i∗n) mod 1000000007,求K^k^k^k......%p 【思路】 先尤拉性質求出k
【hdu 5728 PowMod】【數論】【尤拉函式】【尤拉降冪遞迴取模】【尤拉積性函式】
【連結】 【題意】 n是無平方因子的數 定義k=∑mi=1φ(i∗n) mod 1000000007,求K^k^k^k......%p 【思路】 先尤拉性質求出k,再用尤拉降冪,A^B=A^B%phi(C)+phi(C) (mod C)求出答案 ∑(i=1~
[HDU 5728] PowMod (尤拉函式的積性+尤拉公式降冪+尤拉篩)
HDU - 5728 求 K=∑i=1mϕ(i∗n)mod1000000007 其中 n是 square-free number 求 ans=KKKK..modp 先求 K 由於 ϕ(n)是積性函式,所以對於 n的每個素因子可以提出
HDU 5728 PowMod 尤拉函式 遞迴
感覺智商被掏空… 定義k=∑mi=1φ(i·n)mod1000000007 n是無質因子平方項的數. 求ans=kkkk...k(modp),其中k有無窮多個 資料範圍:1≤n,m,
HDU 5728 PowMod(數論,尤拉函式的各種性質)
[題意] k=∑i=1mϕ(i∗n)%1000000007 其中n為無平方因子的數,求 ans=kkkk...k%p [分析] n無平方因子說明n可以表示為n=p1∗p2∗...∗pl
HDU 5514.Frogs-尤拉函式 or 容斥原理
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 4904 &n
GCD HDU - 1695 (容斥原理 + 尤拉函式)
Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y. Sin
HDU-2588-GCD-數論-尤拉函式+思維
【Description】 The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest diviso
另類容斥和尤拉函式巧妙應用(HDU--5514)
There are mm stones lying on a circle, and nn frogs are jumping over them. The stones are numbered from 00 to m−1m−1 and the frogs are nu
[尤拉函式]HDU 2824 The Euler function 題解
題目大意 求∑i=LRφ(i)\sum_{i=L}^R \varphi(i)∑i=LRφ(i) 解題分析 水題,字首和構造,注意空間不要爆 示例程式碼 題目傳送門 #include<cstdio
#尤拉函式,數論#hdu 6434 Problem I. Count
題目 求∑i=1n∑j=1n[gcd(i+j,i−j)==1]\sum_{i=1}^{n}\sum_{j=1}^n[gcd(i+j,i-j)==1]i=1∑nj=1∑n[gcd(i+j,i−j)==
HDU 6390 GuGuFishtion(尤拉函式+莫比烏斯反演)
#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def
HDU 2588 數論 尤拉函式
題目連結 題意很簡單,思路卻有點難想。 從已知條件一步步來分析: 因 GCD(X,N)>=M 而 1<=X<=N 可得出結論1,也是該題重要的突破口: GCD(X,N)一定是N的約數 這個條件可以給我們一定啟發,因為 N 的約數一
【HDU】5321 Beautiful Set【列舉k求貢獻,尤拉函式應用】
mycode: #include <stdio.h> #include <string.h> #include <vector> #include <algorithm> using namespace
hdu找新朋友 尤拉函式
題目不多說了,看了一會用了最弱智的暴力求解果然TLE了,最後上網查了一下正確解法是尤拉函式,下面就簡單的總結一下尤拉函式。 尤拉函式:在數論,對正整數n,尤拉函式是少於或等於n的數中與n互質的數的
hdu 2462(數論:尤拉定理+快速冪取模優化+尤拉函式)
給定一個數,判斷是否存在一個全由8組成的數為這個數的倍數 若存在則輸出這個數的長度,否則輸出0 寫了好久實在想不出來,對著別人的題解才把題目做出來... 通過這個題學會了快速冪,但是程式碼中說的乘法轉化還是看不懂... 百度了一下才知道這個題目是區預賽的題,看來自己和別人還
HDU 1695 GCD 【容斥】【質因數分解】【尤拉函式】
題意:給定區間[a,b]和[c,d]和k,求出x∈[a,b],y∈[c,d],使得gcd(x,y)==k的個數,給定a=c=1。 分析:對於滿足gcd(x,y)==k的x,y的值,都有x,y是k的倍數,且x,y互質。因此可以將b,d各除以k,得到的新的b,d中找出互質的對