正题

luogu题目链接:https://www.luogu.org/problemnew/show/P4193


题目大意

定义一个函数D(x)D(x)D(x)和S(x)S(x)S(x),S(x)S(x)S(x)表示xxx的各位之和
D(n)={D(S(n)),S≥10S(n)D(n)=\left\{\begin{matrix} \\D(S(n)),S\geq 10 \\S(n) \\ \\ \end{matrix}\right.D(n)=⎩⎪⎪⎨⎪⎪⎧​D(S(n)),S≥10S(n)​
求L∼RL\sim RL∼R之间有多个xxx满足x=D(k)∗kx=D(k)*kx=D(k)∗k


解题思路

因为(n−S(n))mod9=0(n-S(n))\ mod\ 9=0(n−S(n)) mod 9=0,所以D(n)=(n−1)mod9+1D(n)=(n-1)\ mod\ 9+1D(n)=(n−1) mod 9+1
22680modx=0(x∈[1..9])22680\ mod\ x=0(x\in [1..9])22680 mod x=0(x∈[1..9])
若一个数n=D(k)∗kn=D(k)*kn=D(k)∗k,那么n+22680=(k+22680D(k))∗D(k)n+22680=(k+\frac{22680}{D(k)})*D(k)n+22680=(k+D(k)22680​)∗D(k)
证明:

(k+22680D(k))∗D(k)−k∗D(k)=22680(k+\frac{22680}{D(k)})*D(k)-k*D(k)=22680(k+D(k)22680​)∗D(k)−k∗D(k)=22680
(k+22680D(k)−k)∗D(k)=22680(k+\frac{22680}{D(k)}-k)*D(k)=22680(k+D(k)22680​−k)∗D(k)=22680
(k+22680D(k)−k)∗D(k)=22680(k+\frac{22680}{D(k)}-k)*D(k)=22680(k+D(k)22680​−k)∗D(k)=22680
k∗D(k)+22680−k∗D(k)=22680k*D(k)+22680-k*D(k)=22680k∗D(k)+22680−k∗D(k)=22680
22680=2268022680=2268022680=22680
证毕

然后之间根据循环节预处理1∼226801\sim 226801∼22680的就好了


codecodecode

#include<cstdio>
#define LCM 22680
#define ll long long
using namespace std;
ll n,f[1000000],ans;
ll D(ll x)
{return (x-1)%9+1;}
ll ask(ll x)//1~x的个数
{return x/LCM*ans+f[x%LCM];}
int main()
{scanf("%lld",&n);for(ll i=1;i<=LCM;i++)//预处理{for(ll j=1;j<=9;j++)if(D(i/j)==j&&i%j==0){f[i]=1;ans++;break;}f[i]+=f[i-1];}while(n--){ll l,r;scanf("%lld%lld",&l,&r);printf("%lld\n",ask(r)-ask(l-1));}
}

jzoj2700-数字【数论,LCM】相关推荐

  1. C. Orac and LCM(数论lcm, gcd)

    C. Orac and LCM 思路 题目非常简单,就是求gcd(lcm(i,j))foriinrange(n),forjinrange(n),i<jgcd(lcm_(i,\ j))\ for\ ...

  2. P2567 [SCOI2010]幸运数字

    P2567 [SCOI2010]幸运数字 题意: 我们规定只含6或8的数字为幸运号码,而幸运号码的倍数我们也认为是幸运号码,问[l,r]中有多少个幸运号码? 题解: 第一反应是数位dp,但其实不是,我 ...

  3. 力扣算法题,第N个神奇数字(Python)

    878.第N个神奇数字 题目描述: 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + ...

  4. python lcm()_Python LCM –找到LCM的2种方法

    python lcm() In this article, we'll see different ways to find LCM in Python with program examples. ...

  5. 欢乐纪中某B组赛【2018.12.22】

    前言 全暴力第9了解一下, 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 999 ...

  6. CodeForces - 55D Beautiful numbers

    题目链接:http://codeforces.com/problemset/problem/55/D 题意:求区间[L,R]有多少个Beautiful numbers.Beautiful number ...

  7. Codeforces 55D Beautiful numbers (数位DP)

    题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少.beautiful number是指这个数可以被组成它的数字整除.例如15是beautiful number,因为 ...

  8. Programiz C 语言教程·翻译完成

    原文:Programiz 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 学习资源 目录 C 简介 C 关键字和 ...

  9. CF 55D Beautiful numbers 数位DP

    思路: 要找一个数能被他的所有反的数字整除,只需求出这个数能被其数字的LCM整除.而LCM最大为5*7*8*9=2520: 如果直接开dp[20][2520][2520]会超内存,而2^3,3^2,5 ...

最新文章

  1. Numpy生成二项分布随机数
  2. Mybatis和Spring整合
  3. OpenCV 在图像中寻找轮廓
  4. 二维非稳态导热微分方程_室内湿度影响验证:非真空型稳态法导热仪的正确使用方式...
  5. 9.6Gbps WiFi联盟宣布802.11ax协议!
  6. plsql大字段保存类型_大揭秘,学习python,为什么数据类型有这么重要
  7. SpringCloud工作笔记0104---SpringCloud和SpringCloudAlibaba的区别
  8. 免费的开放源代码的Web应用服务器:Tomcat
  9. 大数据——Spark GraphX介绍
  10. 2525 小b的字符串(模拟)
  11. 笑死人啦,史上最恶心的笑话
  12. 硬件工程师学习英语必备
  13. C语言中access/_access函数的使用
  14. 修改串口服务器,串口虚拟化 | 串口服务器Nport 5630 设置
  15. 姿态估计1-06:FSA-Net(头部姿态估算)-源码无死角讲解(1)-训练代码总览
  16. 水果店水果保鲜期延长方法,水果店经营保鲜方法
  17. C++数组连接求能被7整除的数
  18. 实验四:继承性和派生类 建一个楼房Building为基类,建立住宅类House继承Building,存储房号和面积,建立办公室类Office继承Building,存储办公室名称和电话
  19. PMP证书,项目经理事业进步的阶梯
  20. Linux系统之iftop的基本使用

热门文章

  1. Android 封装handler,android封装工作线程跟Handler工具类
  2. ufo帧率测试网站_一加7游戏续航测试 满电开始玩猜猜能玩多久
  3. Java IDEA断点调试
  4. [PAT乙级]1018 锤子剪刀布
  5. DevC++如何安装自定义头文件并使用
  6. C++用Prim算法实现无向图最小生成树
  7. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)C题 图墙+拉格朗日四平方数和定理
  8. 数据结构与算法--我们来玩丢手绢(约瑟夫环问题)
  9. 与php有区别_php://output和php://stdout的区别
  10. 李洪超 硬件工程师_西安职位|各类工程师,软件开发等多岗位招募,轻松月入过万,全程视频面试...