求滿足$n^\equiv b $(mod p)的n的數量。
思路:n!太大了,這一題要用到降冪公式:
所以可以把n的取值分為三部分。
1:n≤phi(c),這部分直接暴力
2:當n!%phi(c)=0時,(n+1)!%phi(c)=0,這時公式可化為求a^(phi(c))
所以第二部分是n!%phi(c)!=0時,也是暴力。
3:最後一部分由於冪指數不變,根據鴿巢原理求出其迴圈節然後算出貢獻。
注意特判p為1的情況(p為1時,m可能爆ull)
#include#includeview code#include
#include
#include
#include
#include
#include
#include
#define ll unsigned long long
#define pi acos(-1.0)
#define f first
#define s second
#define pb push_back
#define debug(x); printf("debug%lld\n",x);
#define des(x); printf("des:%s\n",x+1);
const ll inf=0x3f3f3f3f3f3f3f3f
;const
int inf=0x3f3f3f3f;//
const ll mod=1e9+7;
ll mod;
using
namespace
std;
intt;
ll m,b,p;
const
int n=1e5+5
;ll num[n];
ll oula(ll x)}}
if(x>1
) temp=temp/x*(x-1
);
return
temp;
}ll quickpow(ll x,ll n)
res=res*res%mod;
n=n>>1
; }
return
ans;
}int
main()
else
printf(
"%i64u\n
",m+1
);
continue
; }
for(i;i<=m&&fac<=phi;i++)
fac*=(i+1
); }
fac%=phi;
for(i;fac&&i<=m;i++)
if(i<=m)
}ll total=(m-i+1)/p;
ans+=total*cnt;
total=(m-i+1)%p;
for(ll j=0;j)
}printf(
"%i64u\n
",ans);
}return0;
}
hdu4335 降冪公式 模迴圈節
大意找出多少個n滿足下式 範圍如此之大啊。結果做法是暴力,囧。要用到乙個降冪公式 注意括號裡的條件,那麼當n比較小的時候,就不能用這個了,n比較小,肯定是暴力嘛。那麼第乙個階段便是當n比較小,n 小於phi p 直接暴力求解。當n 大於phi p 的時候,便 可以用上面的降冪公式。還得繼續暴力,發現...
尤拉函式,擴充套件尤拉降冪
尤拉函式 phi n 表示下於n且與n互質的整數的個數。模板 include include include define il inline define maxn 200100 include define ll long long using namespace std 這個函式是求1 n內小...
尤拉函式與尤拉降冪
尤拉函式 對於正整數 n 尤拉函式是小於或等於 n 的正整數中與 n 互質的數的數目。varphi 1 1 除了1之外,所有正整數與它本身都不互質 對於質數 p varphi p p 1 sum varphi d n 其中 d 是 n 的因數 尤拉函式是積性函式,若 m,n 互質,則有 varphi...