描述
由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串?
答案mod2008.
例如,100100不是本原串,因为他是由两个100组成,而1101是本原串。

Input
输入包括多个数据,每个数据一行,包括一个整数n,代表串的长度。

Output
对于每个测试数据,输出一行,代表有多少个符合要求本原串,答案mod2008.

Sample Input

1
2
3
4

Sample Output

2
2
6
12

思路
每个位置都可以为0或者为1,所以一共有2^n 种方案组成这个串.有循环节的话,假设循环节长度为k,则必然有k∣n,即找到n的全部因子,每个因子代表一个循环节的长度。每个长度为k的循环节,又有2^k种情况,减去全为1和全为0的情况就是非本原串的个数。
用2^n-2减去这个数值就是本原串的数量。
递归求解。

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int mod = 2008;
map<int,ll> f;ll qmi(ll m, ll k, ll p)
{ll res = 1 % p, t = m;while (k){if (k&1) res = res * t % p;t = t * t % p;k >>= 1;}return res;
}ll cal(int n)
{if(f.count(n))return f[n];f[n]=(qmi(2LL,(ll)n,mod)-2+mod)%mod;for(int i=2;i*i<=n; i++){if(n%i==0){f[n]=(f[n]-cal(i)+ mod)%mod;//找到一个因子if(i*i!=n)f[n]=(f[n]-cal(n/i)+mod)%mod;//也就找到了另一个}}return f[n];
}int main()
{int n;f[0] = 0;f[1] = 2;f[2] = 2;while(~scanf("%d",&n)){if(n <= 2)printf("%lld\n",f[n]);elseprintf("%lld\n",cal(n));}return 0;
}

HDU 2197:本原串相关推荐

  1. 数学--数论--HDU 2197 本原串 (推规律)

    由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...

  2. hdu 2197 本原串

    Problem Description 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如 ...

  3. hdu 2197 本原串 思维

    题目链接 思路: 这个题目的话我们可以从反面来考虑,题目要求我们求出本源串,那么非本源串的很好求,而且对于n位的二进制,一共有2^n种,假设当前长度为n,那么那些非本源串,可以拆成长度为x的串组成n, ...

  4. HDU 2197 本源串

    如果一个串能完全由其子串组成,那么这个串就不是本源串 求长度为n的本源串的个数. 由定义一个串如果不是本源串,那么他的长度一定是组成其子本源串的长度的(>=1) 整数倍. 那么长度为n的串总个数 ...

  5. 本原串(数论,快速幂)

    由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...

  6. hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4545 这题太坑了,小明的串可以任意删掉某个字符 这句话不知道大家是怎么理解的,我觉得应该是能够删除其中 ...

  7. HDU 1261 字串数

    字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  8. HDU 4545-魔法串

    魔法串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submis ...

  9. hdu 1261 字串数

    指数型母函数应用!!! import java.math.*; import java.util.*; public class Main {     public static int []a;   ...

最新文章

  1. iOS开发系列--通知与消息机制
  2. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(线条色彩、添加均值线)实战(density plot)
  3. ThreadLocal和单例对象比较
  4. linux内存爆了会怎样,linux系统中内存爆满之后会如何?
  5. 深度学习框架caffe及py-faster-rcnn详细配置安装过程
  6. python输入print跳到documentation-习题 48: 更复杂的用户输入
  7. 【算法设计与分析】02 货郎问题与计算复杂性理论
  8. matlab实现图片区水印,怎么在含有水印的图像中提取出水印
  9. JavaScript Math.random()方法介绍
  10. JS-面向对象-对象的特性-禁止对象扩展 / 对象的特性-封印对象 / 对象的特性-冻结对象
  11. SQL Server监控全解析
  12. Codeforces Round #465 (Div. 2) F. Fafa and Array
  13. Java 11 将至,除了 Oracle JDK 还有这些版本!
  14. UNIX高手的10个习惯之一
  15. curl上传文件到服务器命令,linux curl上传文件到服务器
  16. Python采集网易云音乐
  17. C语言练习题之函数部分
  18. font-family、font-style、font-weight、font-variant的区别「In CSS」
  19. DD-WRT无线路由绝招DHCP转发
  20. Mysql数据库学习笔记(2020-04-18 星期六)

热门文章

  1. SynthText文本数据详细解析
  2. SSO(Single Sign On)系列(二)--SSO原理
  3. SSO的实现和参考工具类
  4. 基于Visual C++2010 与office2010开发办公自动化(2)-自动生成excel与word并打开
  5. PCI Express学习篇---Power Management(二)
  6. TCP/IP协议号和端口
  7. LFS系统安装镜像制作
  8. flutter-布局学习
  9. requests实现登陆、点赞、批量点赞、取消点赞
  10. Hadoop-MapReduce的工作原理