hdu4335 降冪公式 模迴圈節

2021-08-04 22:26:15 字數 1217 閱讀 8918

大意找出多少個n滿足下式

範圍如此之大啊。結果做法是暴力,囧。

要用到乙個降冪公式:

注意括號裡的條件,那麼當n比較小的時候,就不能用這個了,n比較小,肯定是暴力嘛。

那麼第乙個階段便是當n比較小,n!小於phi(p),直接暴力求解。

當n!大於phi(p)的時候,便 可以用上面的降冪公式。還得繼續暴力,發現n!%phi(p)會出現0,這是必然的,至少n>=phi(p)為0

,那麼(n+1)!%phi(p)也為0,這便出現了重複,轉變為n^(phi(p))%p==b的問題了。固定了指數,根據鴿巢原理,餘數是迴圈的,那麼只

要找出p個的結果,之後通過迴圈節求解便可以了。

當p為1的時候,b為0,這時候答案是m+1,不過m可能為2^64-1,如果加1的話就溢位了,這裡太坑了

#include

#include

#include

#include

#include

#include

#define ll unsigned long long

//#define mod 1000000007

#define eps 1e-6

#define zero(a)  fabs(a)ll ret=1;

for(ll i=2;i*i<=m;i++)

if(m%i==0) }

if(m>1)

ret*=m-1;

return ret; }

ll powmod(ll a,ll b,ll mod)

return ret; }

ll b,p,m,ring[100005];

int main()

ll i=0,phi=get_eular(p),fac=1,ans=0;

//第乙個環節,n!for(i=0;i<=m&&fac<=phi;i++)

fac=fac%phi;

//第二個環節,n^(n!%phi(p)+phi(p)),直到指數固定為phi(p)

for(;i<=m&&fac;i++)

if(i<=m)

ll idx=(m-i+1)/p;

ans+=cnt*idx;

ll remain=(m-i+1)%p;

for(int j=0;jif(ring[j]==b)

ans++; }

printf("%i64u\n",ans); }

return 0; }

433 島嶼的個數

4.11 陣列統一賦值的函式arrays.fill 感覺自己的想法很野啊,用總的點的個數去減。就是要注意邊界值,陣列是從下標0開始的,一定要注意。public class solution 行數 int m grid 0 length if m 0 列數 int count m n boolean ...

python lintcode 433島嶼的個數

給乙個01矩陣,求不同的島嶼的個數。0代表海,1代表島,如果兩個1相鄰,那麼這兩個1屬於同乙個島。我們只考慮上下左右為相鄰。您在真實的面試中是否遇到過這個題?yes 樣例 在矩陣 1,1,0,0,0 0,1,0,0,1 0,0,0,1,1 0,0,0,0,0 0,0,0,0,1 中有 3 個島.cl...

itouch4 3 3完美越獄5 0 1

備份itunes資料,以及用小雨傘備份shsh檔案 為了完美越獄降級則需要備份相應版本的shsh檔案 下好5.0.1韌體,因為聯機更新速度特別慢 shift restore選擇韌體,出現3194error 公升級成功 完美越獄帖子 挺簡單的,只是進入dfu模式稍微麻煩了那麼一點點,也還ok啦 ito...