5728 PowMod 尤拉函式(降冪)+數學推倒
思路:
很不錯的一個題目,知道求出k之後尤拉降冪遞迴可求,但是仍然無法再符合條件的時間內求出k,化簡了一些式子. 根據尤拉函式的性質可以分成i和n互質不互質兩種情況,然後就不會了...
對於n的質因數,考慮n無平方因子(square-free) ,所以存在gcd(n,n/p)==1.由尤拉函式性質 φ(ab)=φ(a)*φ(b)
解釋一下 φ(i*n*p) p是n的質因子,那麼有: φ(i*n*p)= φ(i*n)*p (由尤拉篩性質可得).
我們將i分為兩種情況,一種是i和n互質,也就是上面第一種,然後是不互質,就是第二種.主要考慮第二種吧,如果不互質,那麼
該數一定可以化成 k*p,我們上面就是列舉這個k,這樣每次最多有m/p,這樣複雜度下降是log級別的.φ(p)+1 和後面那
展開,因為n和i都有p,所以n再拿出一個p,這是i*p 正好是前面缺少的那部分i,兩者提公因式.
這題目T了好多發,一直再實驗,這裡寫了兩種預處理了n所有的質因子m和直接列舉素數判斷是否為質因子,預處理快了一
倍多.
另外,採用遞迴求的話需要預處理出當n為1的時候的尤拉函式的字首和,而且根據上面的式子找到一個n的素因子即可.
遞迴求無限k就不多說了很簡單
具體見程式碼.
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7 + 10; typedef long long ll; const ll Mod = 1e9 + 7; int n,m,p; bool vis[maxn]; int prime[maxn],phi[maxn]; ll sum[maxn]; int vt[maxn]; int num,cnt; void init() { phi[1] = 1; cnt = 0; for(int i = 2;i < maxn;i++) { if(!vis[i]) { prime[cnt++] = i; phi[i] = i - 1; } for(int j = 0;j < cnt && (ll)prime[j] * i < maxn;j++) { vis[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); } } sum[0] = 0; for(int i = 1;i < maxn ;i++) sum[i] = (sum[i - 1] + phi[i])%Mod; return ; } void yinzi() { num = 0; int res = n; for(ll i = 2; i * i <= res;i++) { if(res % i == 0 && !vis[i]) { vt[num++] = i; while(res % i == 0) res /= i; } } if(res > 1 && !vis[res]) vt[num++] = res; return ; } ll solve(int n,int m) { if(!n || !m) return 0; if(n == 1) return sum[m]; if(m == 1) return phi[n]; /*for(int i = 0; i < cnt ;i++) { int w = prime[i]; if(w > n) continue; if(n % prime[i] == 0) { return ((w - 1)*solve(n/w,m)%Mod+solve(n,m/w))%Mod; } }*/ for(int i = 0;i < num;i++) { int w = vt[i]; if(n % w == 0) return (phi[w]*solve(n/w,m)%Mod+solve(n,m/w))%Mod; } return 0; } ll qmod(ll x,ll y,ll mod) { ll res=1; x %= mod; while(y) { if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res%mod; } ll cal(ll k,int x) { if(x == 1) return 0; ll tmp = cal(k,phi[x]); return qmod(k,tmp+phi[x],x); } int main() { init(); while(~scanf("%d %d %d",&n,&m,&p)) { yinzi(); ll k = solve(n,m); ll ans = cal(k,p); printf("%lld\n",ans); } }
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7 + 10; typedef long long ll; const ll Mod = 1e9 + 7; int n,m,p; int prime[maxn],phi[maxn]; ll sum[maxn]; int vt[maxn]; int num,cnt; void init() { phi[1] = 1; cnt = 0; for(int i = 2;i < maxn;i++) { if(phi[i] == 0) { prime[cnt++] = i; phi[i] = i - 1; } for(int j = 0;j < cnt && (ll)prime[j] * i < maxn;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])%Mod; return ; } ll solve(int n,int m) { if(!n || !m) return 0; if(n == 1) return sum[m]; if(m == 1) return phi[n]; for(int i = 0; i < cnt ;i++) { int w = prime[i]; if(w > n) continue; if(n % prime[i] == 0) { return ((w - 1)*solve(n/w,m)%Mod+solve(n,m/w))%Mod; } } return 0; } ll qmod(ll x,ll y,ll mod) { ll res=1; x %= mod; while(y) { if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res%mod; } ll cal(ll k,int x) { if(x == 1) return 0; ll tmp = cal(k,phi[x]); return qmod(k,tmp+phi[x],x); } int main() { init(); while(~scanf("%d %d %d",&n,&m,&p)) { ll k = solve(n,m); ll ans = cal(k,p); printf("%lld\n",ans); } }
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)+∑
ans=kkkk.點選打
思路:
很不錯的一個題目,知道求出k之後尤拉降冪遞迴可求,但是仍然無法再符合條件的時間內求出k,化簡了一些式子. 根據尤拉函式的性質可以分成i和
#include <iostream>
#include <cmath>
using namespace std;
int oula(int n)
{
int ans=n;
int i;
for(i=2;i<=sqrt(n);i++)
{
尤拉函式
定義
尤拉函式ϕ(n)是不超過n且和n互質的正整數的個數。尤拉函式φ(n)的作用就是轉化,從而簡化運算(小性質:n的所有質因子之和=eular(n)*n/2);
下面直觀地看看尤拉函式:
n
1
2
3
4
尤拉函式
初步認識:
在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler's totient function),它又稱為Euler's totient function、φ函式、尤拉商數等。 例如φ
感覺智商被掏空…
定義k=∑mi=1φ(i·n)mod1000000007
n是無質因子平方項的數.
求ans=kkkk...k(modp),其中k有無窮多個
資料範圍:1≤n,m, 一通套路後得Σφ(d)μ(D/d)⌊n/D⌋2。顯然整除分塊,問題在於怎麼快速計算φ和μ的狄利克雷卷積。積性函式的卷積還是積性函式,那麼線性篩即可。因為μ(pc)=0 (c>=2),所以f(pc)還是比較好算的,討論一波即可。
#include<iostream>
#inclu
傳送門
解析:
對於
n
=
∏
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=3221
題解:首先很容易發現遞推公式fn=fn-1*fn-2;寫出前幾項a,b,a*b,a*b^2,a^
描述
小Hi和小Ho有時候會用密碼寫信來互相聯絡,他們用了一個很大的數當做金鑰。小Hi和小Ho約定了一個區間[L,R],每次小Hi和小Ho會選擇其中的一個數作為金鑰。
小Hi:小Ho,這次我們選[L,R]中的一個數K。
小Ho:恩,小Hi,這個K是多少啊?
小Hi:這個K嘛,不如這一次小Ho你自己想辦法
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=3501
題解1:顯然,本體可以用容斥原理,求出每個數的倍數情況,其係數就是莫比烏斯函式。
題解2:對於整
當個板子放著,具體是看了這篇部落格:尤拉函式求法與應用
尤拉函式用希臘字母φ表示,φ(N)表示N的尤拉函式.
對φ(N)的值,我們可以通俗地理解為小於N且與N互質的數的個數(包含1).
//直接求解尤拉函式
int euler(int n){ //返回euler(n
求解與n(1-n-1)互質的質因子的個數
解析:(轉)
定義:對於正整數n,φ(n)是小於或等於n的正整數中,與n互質的數的數目。
例如:φ(8)=4,因為1,3,5,7均和8互質。
性質:1.若p是質數,φ(p)= p-1.
2.若n是質數p的k
Problem Description
The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest divisor
定義
在數論中,對正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。並且用符號φ(n)表示一個整數的尤拉函式。例如φ(8)=4。特殊的φ(1)=1。
一些尤拉函式的性質
性質一
對於一個質數n,φ(n)=n−1。
證明:
因為n是質數。
2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discuss]
De
威爾遜定理
(p−1)!≡p−1≡−1(modp)(pisaprime)(p−1)!≡p−1≡−1(modp)(pisaprime)
由於(p−1)!(p−1)!較大,實際應用不是很廣泛
簡單的證明
費馬小定理
假
HDU - 5728
求 K=∑i=1mϕ(i∗n)mod1000000007
其中 n是 square-free number
求 ans=KKKK..modp
先求 K
由於 ϕ(n)是積性函式,所以對於 n的每個素因子可以提出
[題意]
k=∑i=1mϕ(i∗n)%1000000007
其中n為無平方因子的數,求
ans=kkkk...k%p
[分析]
n無平方因子說明n可以表示為n=p1∗p2∗...∗pl
【連結】
http://acm.hdu.edu.cn/showproblem.php?pid=5728
【題意】
n是無平方因子的數
定義k=∑mi=1φ(i∗n) mod 1000000007,求K^k^k^k......%p
【思路】
先尤拉性質求出k
【連結】
【題意】
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~ 相關推薦
5728 PowMod 尤拉函式(降冪)+數學推倒
尤拉函式(模板)
尤拉函式(總結)
尤拉函式( 數論) + 唯一分解定理
HDU 5728 PowMod 尤拉函式 遞迴
BZOJ4804 尤拉心算(莫比烏斯反演+尤拉函式+線性篩)
2018.12.17【BZOJ4802】尤拉函式(Pollard-Rho)
hdu3221 擴充套件尤拉定理(降冪大法)
hiho 1298 數論·五 尤拉函式 (尤拉函式篩選板子)
hdu3501 尤拉函式(或容斥原理(莫比烏斯函式))
尤拉函式(提供1到N中與N互質的數)
尤拉函式(求與n互質的數的個數)
hdu2588(尤拉函式的運用)
數論學習筆記 尤拉函式 (一些性質和運用)內建杜教篩
BZOJ 2818 Gcd(尤拉函式+質數篩選)
三個重要的同餘式——威爾遜定理,費馬小定理,尤拉定理(擴充套件)
[HDU 5728] PowMod (尤拉函式的積性+尤拉公式降冪+尤拉篩)
HDU 5728 PowMod(數論,尤拉函式的各種性質)
【hdu 5728 PowMod】【數論】【尤拉函式】【尤拉降冪遞迴取模】【尤拉積性函式】
【hdu 5728 PowMod】【數論】【尤拉函式】【尤拉降冪遞迴取模】【尤拉積性函式】