【bzoj2795】【Poi2012】A Horrible Poem
阿新 • • 發佈:2019-01-08
-
題解:
- 詢問區間的整迴圈節
- 設區間長度為$n$
- 如果有迴圈節長為$x$和$y$,那由斐蜀定理得$gcd(x,y)$也一定為一個迴圈節;
- 假設最小的迴圈節長為$mn$,那麼對於任何迴圈節長$x$,一定$mn | x$ , 否則$gcd(mn,x)<mn$矛盾
- 推出$\frac{n}{x} | \frac{n}{mn}$
- 所以每次提出$n$的一個質因子$p$,考慮是否可以分成$p$段,如果可以$n=\frac{n}{p}$繼續找;
- 最後得出來的$n$就是最短的迴圈節;
- 分解質因子可以$O(n)$線篩最大/最小質因子,$O(logn)$分解;
-
1 #include<bits/stdc++.h> 2 #define rg register 3 #define il inline 4 #define ull unsigned long long 5 #define base 1234567891 6 using namespace std; 7 const int N=500010; 8 int vis[N],pr[N],pt,v[N],n,m,len; 9 ull pw[N],h[N]; 10 char gc(){ 11
bzoj2795