[Luogu2359] 三素数数
题目背景
蛟川书院的一道练习题QAQ
题目描述
如果一个数的所有连续三位数字都是大于100的素数,则该数称为三素数数。比如113797是一个6位的三素数数。
输入输出格式
输入格式:
一个整数n(3 ≤ n ≤ 10000),表示三素数数的位数。
输出格式:
一个整数,表示n位三素数的个数m,要求输出m除以10^9 + 9的余数。
输入输出样例
说明
区域动归QAQ
设$f[i][j]$表示i位,最后两位是j的方案数。
可以预处理出来素数, 然后推出$f[3][x]$。
之后递推式子 $\large f[i][j mod 100] = f[i][j mod 100] + f[i-1][j/10]$。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
#define reg register
inline int read() {
int res = ;char ch=getchar();bool fu=;
while(!isdigit(ch)) {if(ch=='-')fu=;ch=getchar();}
while(isdigit(ch)) res=(res<<)+(res<<)+(ch^), ch=getchar();
return fu?-res:res;
}
#define mod 1000000009
int prime[], cnt;
bool is[];
int n;
int f[][];
int ans; int main()
{
n = read();
for (reg int i = ; i <= ; i ++)
{
if (!is[i]) prime[++cnt] = i;
for (reg int j = ; j <= cnt and i * prime[j] <= ; j ++)
{
is[i*prime[j]] = ;
if (i % prime[j] == ) break;
}
}
for (reg int i = ; i <= cnt ; i ++)
if (prime[i] >= ) f[][prime[i]%]++;
for (reg int i = ; i <= n ; i ++)
for (reg int j = ; j <= cnt ; j ++)
if (prime[j] >= ) f[i][prime[j]%] = (f[i][prime[j]%] + f[i-][prime[j]/]) %mod;
for (reg int i = ; i <= ; i ++)
ans = (ans + f[n][i]) % mod;
cout << ans << endl;
return ;
}
[Luogu2359] 三素数数的更多相关文章
- 【算法】简单动态规划——三逆数的O(N^2)解法!
问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai,aj,ak为一个三逆数. 现在给定一个长度为N的数 ...
- 简单动态规划——三逆数的O(N^2)解法!
[算法]简单动态规划——三逆数的O(N^2)解法! 问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai ...
- FJUT寒假作业第三周数蚂蚁(记录第一道并查集)
http://210.34.193.66:8080/vj/Contest.jsp?cid=162#P7 思路:用并查集合并集合,最后遍历,找到集合的根的个数. 并查集是森林,森林中的每一颗树是一个集合 ...
- Keil UV4 BUG(带字库液晶不能显示“数、正、过”问题的请看)
Keil UV3一直存在汉字显示(0xFD)的bug,以前在用到带字库的12864液晶的时候,“数”字总是不能正常显示,后来有网友告诉我这是keil的bug,解决掉了.后来keil升级了,我也换了新版 ...
- Java经典案例之-判断质数(素数)
/** * 描述:任意输入两个数n,m(n<m)判断n-m之间有多少个素数,并输出所有素数. * 分析:素数即质数,除1和本身之外,不能被其他自然数整除的数. * 判断素数的方法为:用一个数分别 ...
- 俄罗斯方块(三):"流动"的方块
问题的提出: 俄罗斯方块允许90度的坡,是不是有点不够科学#(滑稽) 想办法加一种会“滑坡”的方块 本文两大部分: 详细的描绘是怎样的“流动” 写代码,并整合进游戏 本文基于我写的 俄罗斯方块(一): ...
- 小菜鸡儿的第三次OO博客
规格化设计历史 规格化设计的历史目前网上的资料并不多,百度谷歌必应也表示无能为力...... 在这里结合现实情况讲一讲自己对程序规格化的理解,首先代码规格化对代码的影响是间接的,或许它不能让你代码里面 ...
- 枚举1--求小于n的最大素数
枚举1--求小于n的最大素数 总结: 素数是不能被比它小的素数整除. /* 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计 ...
- 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方
905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...
随机推荐
- opencv边缘检测报错
cnts = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] if ...
- 二、springBoot 整合 mybatis 项目实战
前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用的是jdbcTemplate.项目中肯定不会这样使用,上篇文章 ...
- 分别设计点类Point和圆类Circle,点类有两个私有数据纵坐标和横坐标;圆类有也两个私有数据圆心和半径,其中圆心是一个点类对象;要求如下所述: (1) 通过构造方法初始化数据成员,数据成员的初始化通过构造方法的参数传递;(2) 分别编写点和圆的输出函数,其中圆的输出包括圆心和半径的输出;点的输出x,y;
题目相对简单: package naizi; public class Circle { //私有成员及构造方法 private Point center; private int r; Circle ...
- C# HTTP网络常用方法封装
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Regi ...
- MOOC C++笔记(四):运算符重载
第四周:运算符重载 基本概念 运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为. 运算符重载的目的是:扩展C++中提供的运算 ...
- ES6中的迭代器、Generator函数以及Generator函数的异步操作
最近在写RN相关的东西,其中涉及到了redux-saga ,saga的实现原理就是ES6中的Generator函数,而Generator函数又和迭代器有着密不可分的关系.所以本篇博客先学习总结了ite ...
- (七十三)c#Winform自定义控件-资源加载窗体
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- JQuery学习笔记之手网琴效果
这种东西在网上多的是,最近在学JQuery,所以就写了个随笔 <!DOCTYPE html> <html lang="en"> <head> & ...
- Python学习-函数,函数参数,作用域
一.函数介绍 函数定义:函数时组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 我们已经知道python提供了许多内建函数,print(), type()等.我们也可以自己创建函数,这被叫 ...
- 第八届蓝桥杯java b组第十题
标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...