bzoj 3884 尤拉定理

2022-05-20 10:35:56 字數 1311 閱讀 3212

求$$2^}}} mod n$$的值,其中n有1e7。

老實說這題挺有趣的,關鍵是怎麼化掉指數,由於是取模意義下的無限個指數,所以使用尤拉定理一定是可以把指數變為不大於$\varphi(n)$的,但是我們連上一層指數的值都不知道,怎麼化阿...

考慮同餘定理,把n變為$n=2^k·s$的形式,然後$2^k$先提取出來,這樣每向一層模數會減少,最後到1這樣最後一層可以得到0的值了,回溯時計算完一層的指數時再把$2^k$乘回去就好了

/** @date    : 2017-09-11 21:22:36

* @filename: bzoj 3884 尤拉降冪.cpp

* @platform: windows

* @author : lweleth ([email protected])

* @link :

* @version : $id$

*/#include #define ll long long

#define pii pair#define mp(x, y) make_pair((x),(y))

#define fi first

#define se second

#define pb(x) push_back((x))

#define mmg(x) memset((x), -1,sizeof(x))

#define mmf(x) memset((x),0,sizeof(x))

#define mmi(x) memset((x), inf, sizeof(x))

using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 1e7+20;

const double eps = 1e-8;

ll fpow(ll a, ll n, ll mod)

return res;

}int pri[n];

int phi[n];

int c = 0;

void prime()

else //積性函式性質 (i, p) = 1, phi(ip)=phi(i)*phi(p)

phi[i * pri[j]] = phi[i] * (pri[j] - 1);

} }}int get_phi(int x)

} if(x > 2)

phi = phi / x * (x - 1);

return phi;

}int dfs(int p)

int main()

return 0;

}

擴充套件尤拉定理 bzoj3884

題意 擴充套件尤拉定理 擴充套件尤拉定理只需要知道這個式子 對a與m互質性沒有要求時,經常用到後兩個公式降冪。思路 設函式 因為指數上是無限個2,肯定大於phi p 則有 看出可以用遞迴來寫 phi p 很快會變為1,此時 include include using namespace std ty...

尤拉定理 BZOJ3884 上帝與集合的正確用法

題目大意 求2 2 2 2 2 mod p。思路 蒟蒻在知道用尤拉做的前提下,對這題目瞪了好久沒有明白,看了正解撲通一聲跪下來orz直接搬運popoqqq大爺的吧反正有水印 錯誤點 快速冪沒有開longlong 1 include2 include3 include4 include5 typede...

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...