传送门

怎么说呢,一道不可多得的反演题吧,具体解释之后再补

 #include <bits/stdc++.h>
 using namespace std;
 #define rep(i,a,b) for(int i=a;i<=b;++i)
 typedef long long ll;
 ;
 ll mul(ll x,ll y,ll p) {
     x%=p; y%=p;
     return (x*y-(ll)((long double)x/p*y+0.5)*p+p)%p;
 }
 ll _pow(ll x,ll n,ll p) {
     ll ret=;
     ,x=mul(x,x,p)) ) ret=mul(ret,x,p);
     return ret;
 }
 ll tp[]={2LL,3LL,5LL,7LL,13LL,61LL};
 bool MR(ll n) {
     ) return false;
     rep(i,,) if(n==tp[i]) return true;
     rep(i,,) ) return false;
     rep(i,,) {
         ll tmp=n-;)) tmp>>=;
         ll s=_pow(tp[i],tmp,n);
         &&s!=&&tmp!=n-) tmp<<=,s=mul(s,s,n);
         &&!(tmp&)) return false;
     }
     return true;
 }
 ll PR(ll n,ll c) {
     ll i=,k=2LL,x,y; x=y=1LL+rand()%(n-);
     ) {
         x=(mul(x,x,n)+c)%n;
         ll d=__gcd((y-x+n)%n,n);
         &&d!=n) return d;
         if(x==y) return n;
         ;
     }
 }
 int op[maxn],len,cnt,T;
 ll n,P,K,ans,gt[maxn];
 inline void fct(ll n) {
     ) return;
     if(MR(n)){gt[++len]=n;return;}
     ll p=n;
     ;p==n;--c) p=PR(p,c);
     fct(p); fct(n/p);
 }
 ll fpow(ll x,ll n,ll p) {
     ll ret=;
     ,x=x*x%p)
         ) ret=ret*x%p;
     return ret;
 }
 ll g(ll n) {,P);}
 ll f(ll n) {?n%P:(n>>)%P;}
 inline void dfs(int dp,ll d,ll pro) {
     ) {
         )&&(d&)==) return;
         (ans+=1LL*g(n/d)*f(n/d)%P*pro%P)%=P;
         return;
     }
     dfs(dp+,d,pro); pro=1LL*pro*(+P-gt[dp]%P)%P;
     rep(i,,op[dp]) d*=gt[dp],dfs(dp+,d,pro);
 }
 int main() {
 #ifndef ONLINE_JUDGE
     freopen("25.in","r",stdin);
 #endif
     scanf();
     while(T--) {
         scanf("%lld%lld%lld",&n,&K,&P);K%=P;
         len=cnt=;++cnt;
         memset(gt,,,sizeof(op));
         fct(n);
         sort(gt+,gt++len);
         rep(i,,len) {
             ;
             ++op[cnt];
         }
         ans=;dfs(,1LL,1LL);printf("%lld\n",ans);
     }
     ;
 }

[BZOJ 5330][SDOI2018] 反回文串的更多相关文章

  1. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  2. [BZOJ5330][SDOI2018]反回文串

    luogu bzoj sol 枚举一个长度为\(n\)为回文串,它的所有循环位移都可以产生贡献. 但是这样算重了.重复的地方在于可能多个回文串循环同构,或者可能有的回文串经过小于\(n\)次循环位移后 ...

  3. [SDOI2018]反回文串

    题意 问有多少个长度为\(N\)且字符集大小为\(K\)的字符串可以通过回文串旋转 (把第一个字符移到最后)若干次得到.\(K\le N≤10^{18}\) 做法 ARC64F的加强版 设\(h(d) ...

  4. 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)

    题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...

  5. BZOJ 3676: [Apio2014]回文串

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2013  Solved: 863[Submit][Status ...

  6. bzoj 3676: [Apio2014]回文串 回文自动机

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 844  Solved: 331[Submit][Status] ...

  7. 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  8. ●BZOJ 3676 [Apio2014]回文串

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3676 题解: 后缀数组,Manacher,二分 首先有一个结论:一个串的本质不同的回文串的个 ...

  9. 「SDOI 2018」反回文串

    题目大意: 求字符集大小为$k$长度为$n$的经循环移位后为回文串的数量. 题解: 这题是D1里最神的吧 考虑一个长度为$n$回文串,将其循环移位后所有的串都是满足要求的串. 但是显然这样计算会算重. ...

随机推荐

  1. hadoop 2.7.3 (hadoop2.x)使用ant制作eclipse插件hadoop-eclipse-plugin-2.7.3.jar

    为了做mapreduce开发,要使用eclipse,并且需要对应的Hadoop插件hadoop-eclipse-plugin-2.7.3.jar,首先说明一下,在hadoop1.x之前官方hadoop ...

  2. 多个if和一个ifelse的区别

    一个程序的要求如下,输入一个学生的数学成绩,如果大于等于60,那么就输出good,如果小于60那么输出not good int a scanf_s("%d",&a) if( ...

  3. Luogu 4900 食堂

    一道把很多东西放在一起的练手题. $$\sum_{i = A}^{B}\sum_{j = 1}^{i}\left \{ \frac{i}{j} \right \} = \sum_{i = A}^{B} ...

  4. 利用AdaBoost方法构建多个弱分类器进行分类

    1.AdaBoost 思想 补充:这里的若分类器之间有比较强的依赖关系;对于若依赖关系的分类器一般使用Bagging的方法 弱分类器是指分类效果要比随机猜测效果略好的分类器,我们可以通过构建多个弱分类 ...

  5. 数据库MySQL 之 库操作

    数据库MySQL 之 库操作 浏览目录 系统数据库简介 数据库操作 命名规范 用户权限 修改密码 忘记密码 中文乱码问题 一.系统数据库简介 information_schema :虚拟库,不占用磁盘 ...

  6. Entity Framework 6.0 Tutorials(2):Async query and Save

    Async query and Save: You can take advantage of asynchronous execution of .Net 4.5 with Entity Frame ...

  7. JUnit 两日游

    从一个简单的Junit demo到一个用户名与密码的验证 学习Junit,首先肯定是要环境的搭建与配置. 第一步,安装JDK,配置环境变量 第二步,安装eclipse.OS X环境下,eclipse并 ...

  8. oracle数据库之分组查询

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  9. oracle数据库基本操作

    我们主要学习数据库的一些基本操作,比如如何在数据库创建用户,授权,删除用户,回收权限,为用户加锁或者解锁等一些常用的操作. 首先,我们要知道数据库中创建用户的语句怎么写,看下面: 1.创建用户 cre ...

  10. jquery表单数据验证扩展方法

    /** 表单数据验证 **/ $.fn.Validform = function () { var Validatemsg = ""; var Validateflag = tru ...