1. 程式人生 > >HDU 5728 (尤拉函式)

HDU 5728 (尤拉函式)

超級冪的弱化版本這裡

然後就是把底數k求出來,假設p是n的一個質因數,因為n無平方因子,所以gcd(n,pn)=1,所以可以得到f(n,m)=i=1mϕ(i×n)=ϕ(p)i=1&&i%p0mϕ(i×np)+i=1mpϕ(i×p×n)=ϕ(p)i=1&&i%p0mϕ(i×np)+pi=1mpϕ(i×n)=ϕ(p)i=1&&i%p0mϕ(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∑n​j=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中找出互質的對