由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. win7删除桌面文件需要刷新才会消失(2种解决方法)
  2. 使用pdf.js来预览pdf文件_适用于Dynamics365与PowerApps的注释预览组件
  3. 1万亿次、10亿人、10亿张,科技给生活带来多少改变?
  4. 微软为何选择在 Github 上开源 .NET 核心?
  5. win7您需要来自计算机管理员的权限,win7需要提供管理员权限才能打开文件怎么解决...
  6. 计算机四级网络工程师——计算机网络部分题目笔记
  7. QGIS安装以及使用教程
  8. arm-linux-g++ crypto,在Ubuntu中找不到libcrypto
  9. 【Spark】(task5)SparkML基础(分类 | 聚类模型)
  10. 测试使用skywalking_APM工具Skywalking的使用和注意事项
  11. java-php-python-ssm抑郁症患者博客交流平台计算机毕业设计
  12. 3dmax的学习技巧大全
  13. 硬件设计--DC/DC电源芯片详解
  14. CAD转PDF如何设置其为高质量黑白形式?
  15. FPGA学习记录 ACX720 Vivado
  16. 【dbeaver】发生了错误。请参阅日志文件
  17. 肥鲨HDO和HD3买哪个?
  18. 简单测试服务器磁盘读写速度
  19. 360数科沈赟:坏账率仅0.2%,精细化全周期智能风控让欺诈无所遁形
  20. solidity 变量

热门文章

  1. linux 性能测试命令
  2. 找外贸客户邮箱的诀窍
  3. 我的2011,逝去的只是青春
  4. xperf工具集的介绍
  5. mpstat,pidstat,iostat,iotop,lsof
  6. 一种嵌入式设备串口加密协议
  7. Qt之QAbstractAnimation 实现网易云音乐背景墙图片轮换效果
  8. snmpwalk 获取端口流量_用net-snmp获取交换机端口实时流量的一点小发现
  9. Windows 7自动登录
  10. MICCAI 2022 KiPA Challenge:肾脏多器官分割挑战赛