HDU 2197:本原串
描述
由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:本原串相关推荐
- 数学--数论--HDU 2197 本原串 (推规律)
由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...
- hdu 2197 本原串
Problem Description 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如 ...
- hdu 2197 本原串 思维
题目链接 思路: 这个题目的话我们可以从反面来考虑,题目要求我们求出本源串,那么非本源串的很好求,而且对于n位的二进制,一共有2^n种,假设当前长度为n,那么那些非本源串,可以拆成长度为x的串组成n, ...
- HDU 2197 本源串
如果一个串能完全由其子串组成,那么这个串就不是本源串 求长度为n的本源串的个数. 由定义一个串如果不是本源串,那么他的长度一定是组成其子本源串的长度的(>=1) 整数倍. 那么长度为n的串总个数 ...
- 本原串(数论,快速幂)
由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...
- hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4545 这题太坑了,小明的串可以任意删掉某个字符 这句话不知道大家是怎么理解的,我觉得应该是能够删除其中 ...
- HDU 1261 字串数
字串数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU 4545-魔法串
魔法串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- hdu 1261 字串数
指数型母函数应用!!! import java.math.*; import java.util.*; public class Main { public static int []a; ...
最新文章
- iOS开发系列--通知与消息机制
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(线条色彩、添加均值线)实战(density plot)
- ThreadLocal和单例对象比较
- linux内存爆了会怎样,linux系统中内存爆满之后会如何?
- 深度学习框架caffe及py-faster-rcnn详细配置安装过程
- python输入print跳到documentation-习题 48: 更复杂的用户输入
- 【算法设计与分析】02 货郎问题与计算复杂性理论
- matlab实现图片区水印,怎么在含有水印的图像中提取出水印
- JavaScript Math.random()方法介绍
- JS-面向对象-对象的特性-禁止对象扩展 / 对象的特性-封印对象 / 对象的特性-冻结对象
- SQL Server监控全解析
- Codeforces Round #465 (Div. 2) F. Fafa and Array
- Java 11 将至,除了 Oracle JDK 还有这些版本!
- UNIX高手的10个习惯之一
- curl上传文件到服务器命令,linux curl上传文件到服务器
- Python采集网易云音乐
- C语言练习题之函数部分
- font-family、font-style、font-weight、font-variant的区别「In CSS」
- DD-WRT无线路由绝招DHCP转发
- Mysql数据库学习笔记(2020-04-18 星期六)