bzoj4173 数学
2018-03-09 22:06
375 查看
Description
N,M<=10^15
Solution
首先需要知道一个结论,若n%k+m%k≥kn%k+m%k≥k ,则⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1证明如下:
显然可以设n=a1k+r1n=a1k+r1,m=a2k+r2m=a2k+r2,那么⌊n+mk⌋=a1+a2+1⌊n+mk⌋=a1+a2+1,⌊nk⌋=a1⌊nk⌋=a1,⌊mk⌋=a2⌊mk⌋=a2
因为r1+r2≥kr1+r2≥k因此⌊r1+r2k⌋=1⌊r1+r2k⌋=1
现在令t=∑n%k+m%k≥kφ(k)t=∑n%k+m%k≥kφ(k),显然答案就是φ(n)∗φ(m)∗tφ(n)∗φ(m)∗t
那么有t=∑n%k+m%k≥kφ(k)=∑n+mk=1φ(k)[⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1]t=∑n%k+m%k≥kφ(k)=∑k=1n+mφ(k)[⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1]
我们发现后面那一坨布尔表达式不为0就为1,那么有t=∑n+mk=1φ(k)(⌊n+mk⌋−⌊nk⌋−⌊mk⌋)t=∑k=1n+mφ(k)(⌊n+mk⌋−⌊nk⌋−⌊mk⌋),可以感受一下区别
那么拆一下就成了t=∑n+mk=1φ(k)⌊n+mk⌋−∑nk=1φ(k)⌊nk⌋−∑mk=1φ(k)⌊mk⌋t=∑k=1n+mφ(k)⌊n+mk⌋−∑k=1nφ(k)⌊nk⌋−∑k=1mφ(k)⌊mk⌋
考虑一下∑nk=1φ(k)⌊nk⌋∑k=1nφ(k)⌊nk⌋的意义,有∑nk=1φ(k)⌊nk⌋=∑nk=1∑⌊nk⌋i=1φ(k)=∑ni=1∑k|iφ(k)=∑ni=1i∑k=1nφ(k)⌊nk⌋=∑k=1n∑i=1⌊nk⌋φ(k)=∑i=1n∑k|iφ(k)=∑i=1ni
辣莫t=12[(n+m)(n+m+1)−n(n+1)−m(m+1)]=nmt=12[(n+m)(n+m+1)−n(n+1)−m(m+1)]=nm
即ans=φ(n)∗φ(m)∗nmans=φ(n)∗φ(m)∗nm
惊喜不惊喜,意外不意外
Code
#include <stdio.h> #include <string.h> #define rep(i,st,ed) for (int i=st;i<=ed;++i) typedef long long LL; const int MOD=998244353; void cal(LL &ret,LL x) { ret=ret/x; ret=ret*(x-1); } LL get_phi(LL n) { LL ret=n; for (LL i=2;i*i<=n;i++) { if (n%i) continue; cal(ret,i); while (n%i==0) n/=i; } if (n!=1) ret=(ret/n)*(n-1); return ret; } int main(void) { LL n,m; scanf("%lld%lld",&n,&m); printf("%lld\n",n%MOD*m%MOD*(get_phi(m)%MOD)%MOD*(get_phi(n)%MOD)%MOD); return 0; }
相关文章推荐
- 【BZOJ-4173】数学 欧拉函数 + 关于余数的变换
- [BZOJ4173]数学
- BZOJ 4173: 数学
- BZOJ 4173 数学 数论
- 【BZOJ 4173】 数学 数论
- bzoj 4173: 数学 (数论+sqrt求phi)
- 【BZOJ4173】数学 欧拉函数神题
- BZOJ 4173: 数学
- BZOJ4173 数学
- BZOJ 4173: 数学
- [BZOJ4173]数学(数论)
- BZOJ-4173 数学 欧拉函数+关于余数的变换
- BZOJ 4173: 数学 欧拉函数
- 【bzoj4173】数学
- 【欧拉函数】BZOJ4173-数学
- 【bzoj 4173】数学
- bzoj 4173: 数学 欧拉函数
- 【bzoj4173】【数学】【数论】
- [bzoj4173]数学
- 【BZOJ2693】jzptab(莫比乌斯反演)(数学)