C-小a与星际探索
https://blog.csdn.net/Z_sea/article/details/86600771
还没看懂。。。。
D-小a与黄金街道
欧拉函数,容斥原理,快速幂取模
n,x互质,且n,y互质,且,n-x=y;
性质:当x和n互质时, n-x一定也和n互质
也就是说,只要满足n与x互质,A和B的数量就会发生变化。
那么ans=A*k^p1*k^p2*...*pn+B*k^pn*k^p(n-1)*...*p1=(A+B)*k^r。(r=p1+...+pn)这里的p1...pn是小于n的所有质因数,欧拉函数。
n的所有质因数之和等于euler(n)*n/2;
#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> using namespace std; typedef long long ll; ll mod=1e9+7; ll mul(ll a,ll b){ a%=mod;b%=mod; ll c=(long double)a*b/mod; ll ans=a*b-c*mod; return (ans%mod+mod)%mod; } ll pow_mod(ll x,ll n){//快速幂 ll res=1; while(n){ if(n&1) res=mul(res,x); x=mul(x,x); n>>=1; } return res; } ll euler(ll x){ ll res=x,a=x; for(ll i=2;i*i<=a;i++){ if(a%i==0){ res=res-res/i; while(a%i==0)a/=i; } } if(a>1)res=res-res/a; return res; } ll n,k,a,b; int main(){ scanf("%lld%lld%lld%lld",&n,&k,&a,&b); ll ans=(a+b)%mod; ll R=euler(n)*n/2; ans=(ans*pow_mod(k,R))%mod; printf("%lld\n",ans); return 0; }