本原串(数论,快速幂)
由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
题意:给出一个n,找出本原串的个数;首先什么是本原串?不能表示为由几个相同的较小的串连接成的串(也就是没有规律可循);
解题思路:首先是由0,1组成的串,那么长度为n的话有多少中组合?2^n个情况,所以直接寻找很麻烦,且没有思绪如何判断是否为本原串;那怎么做呢?首先不论长度n为多少(出了1之外),都有两个不是,全为0或者1,那就不是本原串;那其他的呢?可以从不是本原串思考,因为它是由循环的一个长度为k的子串形成的,所以这里用递归的话就比较好解决,就是当n的因子就可以作为子串的长度进行循环出来,所以再减去,每一个因子带来的组数,并且每个因子还有其自己的因子,所以可以调用递归进行计算。
解题步骤:
1)运用快速幂来进行查询长度为n的所有串的情况数;
2)然后利用递归来进行查询长度为n的本原串数,其中利用了非本原串的个数,然后来进行相减,得到本原串数;
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 100000005
#define mod 2008
long long a[maxn];
long long cs(long long b)
{long long ans=1;long long a=2;while(b){if(b&1) ans=(ans*a)%mod;b/=2;a=(a*a)%mod;}return ans;
}
long long sove(long long n)
{if(a[n]) return a[n];if(n==1) return 2;long long num;num=cs(n);for(long long i=2;i*i<=n;i++){if(n%i==0){num=(num-sove(i)+mod)%mod;if(i*i!=n) num=(num-sove(n/i)+mod)%mod;}}return num=(num-2+mod)%mod;
}
int main()
{long long n;while(scanf("%lld",&n)!=EOF){printf("%lld\n",sove(n));}return 0;
}
本原串(数论,快速幂)相关推荐
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...
- 第二十七章 数论——快速幂与逆元
第二十七章 快速幂与扩展欧几里德算法 一.快速幂 1.使用场景 2.算法思路 (1)二进制优化思想 (2)模运算法则 3.代码实现 (1)问题 (2)代码 二.快速幂求逆元 1.什么是逆元? (1)同 ...
- BZOJ-1008 越狱 数论快速幂
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...
- 数论-快速幂、矩阵快速幂、慢速乘
文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...
- P2842-LJJ算数【数论,快速幂】
正题 题目链接:https://www.luogu.org/problemnew/show/P2842 题目大意 求 a#b=aaaa-a(a\#b=a^{a^{a^{a^{-^a}}}}(a#b=a ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- 数学--数论--快速幂--最大公约数--位运算模板
ACM常用模板合集 //位运算求解最大公约数 long long gcd(long long a,long long b) { if(a<b) return gcd(b,a);if(b==0) ...
- 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂
Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ...
- HDU6395 Sequence(矩阵快速幂+数论分块)
题意: F(1)=A,F(2)=B,F(n)=C*F(n-2)+D*F(n-1)+P/n 给定ABCDPn,求F(n) mod 1e9+7 思路: P/n在一段n里是不变的,可以数论分块,再在每一段里 ...
最新文章
- python输出数据到excel-python实现数据导出到excel的示例
- Fanout交换器-编写生产者
- docker镜像导入、导出
- se是什么职位_女皇大学PSE&SE 独家解析!
- Redis集群搭建~Redis-x64-3.2.100版本
- Notification使用详解之四:由后台服务向Activity发送进度信息
- lLinux编程大全
- Ado.Net Entity Framework 批量删除、判断存在
- 4 软件业务分析要点
- 计算机网络常用操作系统,计算机目前常用的操作系统有哪些?
- Excel作图-制作复合饼图
- 流媒体服务器ZLMediaKit
- [学习笔记]Python for Data Analysis, 3E-9.绘图和可视化
- Cross-X Learning for Fine-Grained Visual Categorization
- 一种简单的2D Roguelike地图生成算法
- 防saq注入_SAQ-TZh-025 危险源辨识、风险评价和风险控制措施表(003施工电源及用电设备)...
- 统计图表导入word,用到echarts,highcharts,amcharts,jfreechart
- 读书笔记:如何阅读一本书
- OBS键盘插件自定义diy
- 金蝶云单据下推,转换规则
热门文章
- prefab内容分析
- mendeley高亮与mendeley取消高亮_mendeley highlight_mendeley highlight canceling
- 织梦去除底部版权power by dedecms
- 【ERROR】cannot verify xxx certificate, issued by ‘/C=US/O=Let’s Encrypt/CN=R3’:use `--no-check-certif
- eclipse 中 project facets
- Android 10 Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TY
- CListCtrl 虚拟列表技术
- Dependency‘org.framework:spring-webmvc:’ not found
- IPC网表、坐标文件、装配PDF输出
- 1_simulink简单入门_simulink仿真PID控制