由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;
}

本原串(数论,快速幂)相关推荐

  1. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

  2. 第二十七章 数论——快速幂与逆元

    第二十七章 快速幂与扩展欧几里德算法 一.快速幂 1.使用场景 2.算法思路 (1)二进制优化思想 (2)模运算法则 3.代码实现 (1)问题 (2)代码 二.快速幂求逆元 1.什么是逆元? (1)同 ...

  3. BZOJ-1008 越狱 数论快速幂

    1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...

  4. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  5. P2842-LJJ算数【数论,快速幂】

    正题 题目链接:https://www.luogu.org/problemnew/show/P2842 题目大意 求 a#b=aaaa-a(a\#b=a^{a^{a^{a^{-^a}}}}(a#b=a ...

  6. 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂

    [bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...

  7. 数学--数论--快速幂--最大公约数--位运算模板

    ACM常用模板合集 //位运算求解最大公约数 long long gcd(long long a,long long b) { if(a<b) return gcd(b,a);if(b==0) ...

  8. 数学--数论--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 ...

  9. 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里是不变的,可以数论分块,再在每一段里 ...

最新文章

  1. python输出数据到excel-python实现数据导出到excel的示例
  2. Fanout交换器-编写生产者
  3. docker镜像导入、导出
  4. se是什么职位_女皇大学PSE&SE 独家解析!
  5. Redis集群搭建~Redis-x64-3.2.100版本
  6. Notification使用详解之四:由后台服务向Activity发送进度信息
  7. lLinux编程大全
  8. Ado.Net Entity Framework 批量删除、判断存在
  9. 4 软件业务分析要点
  10. 计算机网络常用操作系统,计算机目前常用的操作系统有哪些?
  11. Excel作图-制作复合饼图
  12. 流媒体服务器ZLMediaKit
  13. [学习笔记]Python for Data Analysis, 3E-9.绘图和可视化
  14. Cross-X Learning for Fine-Grained Visual Categorization
  15. 一种简单的2D Roguelike地图生成算法
  16. 防saq注入_SAQ-TZh-025 危险源辨识、风险评价和风险控制措施表(003施工电源及用电设备)...
  17. 统计图表导入word,用到echarts,highcharts,amcharts,jfreechart
  18. 读书笔记:如何阅读一本书
  19. OBS键盘插件自定义diy
  20. 金蝶云单据下推,转换规则

热门文章

  1. prefab内容分析
  2. mendeley高亮与mendeley取消高亮_mendeley highlight_mendeley highlight canceling
  3. 织梦去除底部版权power by dedecms
  4. 【ERROR】cannot verify xxx certificate, issued by ‘/C=US/O=Let’s Encrypt/CN=R3’:use `--no-check-certif
  5. eclipse 中 project facets
  6. Android 10 Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TY
  7. CListCtrl 虚拟列表技术
  8. Dependency‘org.framework:spring-webmvc:’ not found
  9. IPC网表、坐标文件、装配PDF输出
  10. 1_simulink简单入门_simulink仿真PID控制