本原串

题目链接

思路:

反向想将总的个数减去不符合要求的个数。我们枚举n的约数,然后把n平均分,就可以构成不符合要求的串,\(g[i]\)表示循环节长为i约数的个数\(2^i\),我们要求循环节为\(i\)的\(f[i]\),那么可以想到莫比乌斯,但在这里莫比乌斯不好些范围有些大,所以我们用dp的方式去重\(f[i] -= g[i] - f[j](j| i)\)复杂度为\(m*log(m)\) (\(m\)为\(n\)的约数个数).

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 2008;
int quick(int n,int m);
map<int,int>my;
int ans[1000000];
int f[1000000];
int slove(int n);
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",slove(n));
}
return 0;
}
int quick(int n,int m)
{
int ans = 1;
while(m)
{
if(m&1)
ans = ans*n%mod;
n = n*n%mod;
m>>=1;
}
return ans;
}
int slove(int n)
{
int sum = 0;
int cn = 0;
memset(f,0,sizeof(f));
for(int i = 1; i <= sqrt(n); i++)
{
if(n%i == 0)
{
ans[cn++] = i;
if(i!=n/i)
ans[cn++] = n/i;
}
}
sort(ans,ans+cn);
cn--;
for(int i = 0; i < cn; i++)
{
f[i] = f[i]+quick(2,ans[i]);
f[i]%=mod + mod;
f[i]%=mod;
for(int j = i+1; j < cn; j++)
{
if(ans[j]%ans[i] == 0)
{
f[j] = ((f[j] - f[i])%mod + mod)%mod;
}
}
}
sum = quick(2,n);
for(int i = 0; i < cn; i++)
{
sum = sum - f[i];
sum %= mod;
}
return (sum + mod)%mod;
}

最新文章

  1. Moon.Orm 5.0(MQL版)及之前版本的开源计划
  2. Xamarin开发Android笔记:图片切换ImageSwitcher
  3. win10下LPT并口打印失败和POS打印机的钱箱不能打开,win10的坑
  4. JMS - 消息确认
  5. 服务器上搭建spark开发环境
  6. projecteuler----&amp;gt;problem=8----Largest product in a series
  7. Cin、Cout 加快效率方法
  8. 自己动手系列——实现一个简单的LinkedList
  9. hdu1541 Stars 树状数组
  10. 转:Jmeter分布式测试
  11. 【C++ Primer 第十三章】4. 拷贝控制示例
  12. 动手动脑(&amp;课后实验):类和对象
  13. RN 实现简易浏览器
  14. java回文算法
  15. mobileeye
  16. Luogu-4022 [CTSC2012]熟悉的文章
  17. 问题:HttpContext.Current.Session;结果:Session与HttpContext.Current.Session到底有什么区别呢?
  18. nodejs加密解密
  19. poj 3617Best Cow Line
  20. Python之元祖

热门文章

  1. linux 软链接与查看历史指令
  2. day08 外键字段的增删查改
  3. Flink基础
  4. flink-----实时项目---day05-------1. ProcessFunction 2. apply对窗口进行全量聚合 3使用aggregate方法实现增量聚合 4.使用ProcessFunction结合定时器实现排序
  5. 【JAVA开发】浅析双亲委派机制
  6. linux安装redis报错
  7. 增大Oracle Virtualbox的磁盘空间
  8. 用Navicat连接数据库-数据库连接(MySQL演示)
  9. centos7源码安装Nginx-1.6
  10. pthread_cond_signal与pthread_cond_wait详解