本原串

题目链接

思路:

反向想将总的个数减去不符合要求的个数。我们枚举n的约数,然后把n平均分,就可以构成不符合要求的串,\(g[i]\)表示循环节长为i约数的个数\(2^i\),我们要求循环节为\(i\)的\(f[i]\),那么可以想到莫比乌斯,但在这里莫比乌斯不好些范围有些大,所以我们用dp的方式去重\(f[i] -= g[i] - f[j](j| i)\)复杂度为\(m*log(m)\) (\(m\)为\(n\)的约数个数).

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 2008;
int quick(int n,int m);
map<int,int>my;
int ans[1000000];
int f[1000000];
int slove(int n);
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",slove(n));
}
return 0;
}
int quick(int n,int m)
{
int ans = 1;
while(m)
{
if(m&1)
ans = ans*n%mod;
n = n*n%mod;
m>>=1;
}
return ans;
}
int slove(int n)
{
int sum = 0;
int cn = 0;
memset(f,0,sizeof(f));
for(int i = 1; i <= sqrt(n); i++)
{
if(n%i == 0)
{
ans[cn++] = i;
if(i!=n/i)
ans[cn++] = n/i;
}
}
sort(ans,ans+cn);
cn--;
for(int i = 0; i < cn; i++)
{
f[i] = f[i]+quick(2,ans[i]);
f[i]%=mod + mod;
f[i]%=mod;
for(int j = i+1; j < cn; j++)
{
if(ans[j]%ans[i] == 0)
{
f[j] = ((f[j] - f[i])%mod + mod)%mod;
}
}
}
sum = quick(2,n);
for(int i = 0; i < cn; i++)
{
sum = sum - f[i];
sum %= mod;
}
return (sum + mod)%mod;
}

本原串(hdu 2197)的更多相关文章

  1. 本原串(HDU 2197 快速幂)

    本原串 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. hdu 2197 求长度为n的本原串 (快速幂+map)

    Problem Description由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串?答案mod2008.例如,10 ...

  3. 数学--数论--HDU 2197 本原串 (推规律)

    由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...

  4. hdu-2197 本原串---枚举因子+容斥定理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2197 题目大意: 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个 ...

  5. hdu 2197 推公式

    题意:由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串?答案mod2008.例如,100100不是本原串,因为他是由两 ...

  6. hdu 2197 本原串

    http://acm.hdu.edu.cn/showproblem.php?pid=2197 长度为n的01串有2的n次方个,再减去不符合要求的.不符合要求的字符串就是长度为n的约数的字符串. 递归处 ...

  7. HDU 2197 本源串

    如果一个串能完全由其子串组成,那么这个串就不是本源串 求长度为n的本源串的个数. 由定义一个串如果不是本源串,那么他的长度一定是组成其子本源串的长度的(>=1) 整数倍. 那么长度为n的串总个数 ...

  8. NOIP模拟

    1.要选一个{1,2,...n}的子集使得假如a和b在所选集合里且(a+b)/2∈{1,2,...n}那么(a+b)/2也在所选集合里 f[i]=2*f[i-1]-f[i-2]+g[i] g[n]:选 ...

  9. LCS,LIS,LCIS

    网站:CSUST 8月3日(LCS,LIS,LCIS) LCS:      以下讲解来自:http://blog.csdn.net/yysdsyl/article/details/4226630 [问 ...

随机推荐

  1. nrf 51802 和 nrf51822 的区别于联系

    51802QFAA与51822QFAA在FLASH 跟RAM的容量没有差别:区别在于:a,接收灵敏度 51802是-91dBm;51822是-93dBm,这个差异导致接收距离有差异:b,Tx Powe ...

  2. Selenium的安装和使用

    一.Selenium的安装,Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作.对于一些JavaScript渲染的页面来说,这种抓取方式非常有效.1.pi ...

  3. java面试题目偏基础

    一.JAVA基础篇-概念1.简述你所知道的Linux:Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(An ...

  4. Prometheus_exporter安装与使用

    Promethues概述:可以看一下更详细的介绍,以下为转载的博客,原文链接,支持原创,请多多支持!!:闫世成的博客园 Prometheus-node-exporter 1.简介: 内核公开的硬件和操 ...

  5. 剖析ApplicationRunner、CommandLineRunner

    需求:SpringBoot项目启动成功后执行某方法 方案:在spring-boot中提供了两种Runner接口:ApplicationRunner和CommandLineRunner,编写自己的类实现 ...

  6. Flink(一)【基础入门,Yarn、Local模式】

    目录 一.介绍 Spark | Flink 二.快速入门:WC案例 pom依赖 批处理 流处理 有界流 无界流(重要) 三.Yarn模式部署 安装 打包测试,命令行(无界流) Flink on Yar ...

  7. Hive(七)【内置函数】

    目录 一.系统内置函数 1.查看系统自带内置函数 2.查看函数的具体用法 二.常用内置函数 1.数学函数 round 2.字符函数 split concat concat_ws lower,upper ...

  8. Running shell commands by C++

    #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; st ...

  9. Default arguments and virtual function

    Predict the output of following C++ program. 1 #include <iostream> 2 using namespace std; 3 4 ...

  10. CSS font-size: 0去除内联元素空白间隙

    我们在编写HTML标签的时候,通常会使用换行,缩进来保证代码的可读性.同时,在编写CSS样式的时候,也会需要把一些元素设置为inline或inline-block.这样一来,有时在页面中会出现意外的空 ...