HDU 2197 本源串
如果一个串能完全由其子串组成,那么这个串就不是本源串
求长度为n的本源串的个数。
由定义一个串如果不是本源串,那么他的长度一定是组成其子本源串的长度的(>=1) 整数倍。
那么长度为n的串总个数是2^n个
枚举n 的因子 长度为n的 本源串的个数就是2^n - a[k1]-a[k2]-..(k1 k2..是n的非n因子)。
因为n可以非常的大,所以需要快速幂,不能直接打表,求因子的复杂度是根号n
所以在线算,查,记忆化一下还是很快的。
1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <queue> 5 #include <vector> 6 #include <algorithm> 7 #include <stack> 8 #include <set> 9 #include <map> 10 #include <math.h> 11 #define pb push_back 12 #define CLR(a) memset(a, 0, sizeof(a)); 13 #define MEM(a, b) memset(a, b, sizeof(a)); 14 #define fi first 15 #define se second 16 17 using namespace std; 18 19 typedef long long ll; 20 21 const int MAXN = 100000007; 22 const int MAXV = 207; 23 const int MAXE = 207; 24 const int INF = 0x3f3f3f3f; 25 const ll MOD = 2008; 26 27 int n; 28 29 ll mypow(ll t, int x) 30 { 31 ll tmp; 32 if (x == 0) return 1; 33 tmp = mypow(t, x >> 1) % MOD; 34 if (x & 1) tmp = (t*tmp*tmp) % MOD; 35 else tmp = (tmp*tmp) % MOD; 36 return tmp; 37 } 38 39 vector<int> getfac(int x) 40 { 41 vector<int> v; 42 for(int i = 1; i*i <= x; i++) 43 { 44 if (x % i == 0 && x != i) 45 { 46 v.pb(i); 47 if (x / i != i && x / i != x) v.pb(x/i); 48 } 49 } 50 return v; 51 } 52 ll a[MAXN]; 53 ll fun(int x) 54 { 55 if (a[x] != 0) return a[x]; 56 vector<int> v = getfac(x); 57 ll ret = mypow(2, x); 58 for (int i = 0; i < v.size(); i++) 59 { 60 a[v[i]] = fun(v[i]); 61 ret = (ret + MOD - a[v[i]]) % MOD; 62 } 63 return ret % MOD; 64 } 65 66 int main() 67 { 68 //freopen("in.txt", "r", stdin); 69 int m = 0; 70 while (~scanf("%d", &n)) 71 { 72 if (a[n] == 0) 73 { 74 a[n] = fun(n) % MOD; 75 } 76 printf("%lld\n", a[n]); 77 } 78 return 0; 79 }
转载于:https://www.cnblogs.com/oscar-cnblogs/p/7615211.html
HDU 2197 本源串相关推荐
- hdu 2197 本原串 思维
题目链接 思路: 这个题目的话我们可以从反面来考虑,题目要求我们求出本源串,那么非本源串的很好求,而且对于n位的二进制,一共有2^n种,假设当前长度为n,那么那些非本源串,可以拆成长度为x的串组成n, ...
- 数学--数论--HDU 2197 本原串 (推规律)
由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...
- hdu 2197 本原串
Problem Description 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如 ...
- hdu2197 本源串
分析:长度为n的本源串=2^n-长度为n的非本源串,对于长度为n的非本源串一定是由长度为m的串循环k次得到的,所以m一定是n的约数,所以只需要求到所有n的约数长度构成的本源串个数即可(不能求构成串之和 ...
- HDU 2197:本原串
描述 由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; ...
最新文章
- C/C++刷题知识点总结
- AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术...
- 机器学习的数据类型有哪几种?每种数据类型对应的操作有哪些?为什么?
- android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)
- 框架前期准备篇之AutoFac常见用法总结 转载
- php7.0 yield,PHP7中生成器的新特性 yield-from amp;amp; return-values
- 计算机英语一级考试试题,全国计算机一级考试试题及答案
- 【springboot 踩坑记录】拦截器中无法注入bean
- 07-霸道的Oracle内存使用
- html中radio单选按钮控件标签用法解析及如何设置默认选中
- InfluxDB简介,InfluxDB的基本操作
- 第三章 PCB 封装库绘制
- R语言之主成分分析和因子分析
- face_recognition常用方法
- formatter格式说明
- 利用Matlab筛选给定条件的数据
- oracle的set函数,setex(oracle trunc函数)
- AFM(弹性模量)—文献专项阅读
- 年薪50万的Python工程师曝光公司面试题
- OpenCV图像处理总结 ——用opencv给图片换背景色为例
热门文章
- Excel.Application使用手册
- 异物堆积,导致手机Type-C接口充电不畅、无法充电的问题
- STM32 用RS485进行半双工通信出现的问题
- python语言入门h_python教程,pythonh学习线路图?
- Win10切换共享文件夹账号
- npm install 很慢、卡死怎么解决
- 我在用的翻译软件,微软翻译,网易有道词典
- input禁用样式修改 input disabled样式禁用方法及样式isabled样式禁用方法及样式
- 学习LSM(Linux security module)之四:一个基于LSM的简单沙箱的设计与实现
- 「企企通」完成Pre-D轮融资,加速采购供应链工业软件和 SaaS 网络生态构建