codeforce 55D Beautiful numbers

CodeForces 55D-Beautiful numbers【数位DP+思维】 题目链接:https://codeforces.com/problemset/problem/55/D 题意: Volodya 是一个古怪的男孩,他的品味与众不同。对他来说,一个正整数是漂亮数,当且仅当它能够被自身的各非零数字整除。我们不必与之争辩,只需计算给定范围中有多少个漂亮数。 输入 输入的第一行包含了测试用例的数目t(1 ≤ t ≤ 10)。接下来的t行,每行包含两个自... 阅读详情
D. Beautiful numbers
time limit per test:4 seconds
memory limit per test:256 megabytes
input:standard input
output:standard output

Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. We will not argue with this and just count the quantity of beautiful numbers in given ranges.
Input

The first line of the input contains the number of cases t (1 ≤ t ≤ 10). Each of the next t lines contains two natural numbers li and ri (1 ≤ li ≤ ri ≤ 9 · 1018).

Please, do not use %lld specificator to read or write 64-bit integers in C++. It is preffered to use cin (also you may use %I64d).
Output

Output should contain t numbers — answers to the queries, one number per line — quantities of beautiful numbers in given intervals (from li to ri, inclusively).
Sample test(s)
Input
1
1 9
Output
9
Input
1
12 15
Output

2


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int num[20], ln;
__int64 f[20][2521][50];
int hash[2521];

void swap(int &a, int &b){
	int t = a;
	a = b; 
	b = t;
}

int gcd(int a, int b){
	int c;
	while(b){
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}

int Lcm(int a, int b){
//	printf("Lcm %d, %d\n", a, b);	
	if (a < b) swap(a, b);
	if (b == 0) return a;
	return a * b / gcd(a, b);
}

__int64 dfs(int i, int mod, int mark, bool flag){
	int p, high;
	__int64 ret;
	
//	printf("dfs(%d, %d, %d, %d)\n", i, mod, mark, flag);
	
	if (i <= 0) return (mod % mark == 0);
	if (!flag && ~f[i][mod][hash[mark]]) return f[i][mod][hash[mark]];
	
	high = flag ? num[i] : 9;
	ret = 0;
	for (p = 0; p <= high; p++){
//		printf("p = %d\n", p);
		ret += dfs(i - 1, (mod * 10 + p) % 2520, Lcm(mark, p), flag && (p == high));
	}
	if (!flag) f[i][mod][hash[mark]] = ret;
	return ret;
}


void trans(__int64 n){
	ln = 0;
	while(n){
		num[++ln] = n % 10;
		n = n / 10;
	}
}

__int64 calc(__int64 n){
	trans(n);
	return dfs(ln, 0, 1, true);
}

void init(){
	int i, j, k, l, cnt = 0;
	memset(f, 0xff, sizeof(f));
	hash[0] = 0;
	for (i = 1; i < 10; i *= 2)
		for (j = 1; j < 10; j *= 3)
			for (k = 1; k < 10; k *= 5)
				for (l = 1; l < 10; l *= 7){
					hash[i * j * k * l] = ++cnt;
				}
}

int main(){
	__int64 L, R;
	int T;
	init();
	scanf("%d", &T);
	while(T--){
		scanf("%I64d %I64d", &L, &R);
		printf("%I64d\n", calc(R) - calc(L - 1));
	}
	return 0;
}

/**************************
按位dp
表示看解题报告后写的。。见http://hi.baidu.com/%B1%BFС%BA%A2_shw/blog/item/a30e5c230dffdfe7d6cae200.html
开始时想不通怎么判是否整除所有位的数,想存模2..9的所有余数的情况。。。
其实根本没必要,我们希望知道一个数n是否整除LCM{n的每位数}(记做mark),而LCM{2...9} = 2520的,一定能整除mark,
所以 mark | n <=> mark | (n % 2520)
或者说 n % mark = (k * 2520 + k1) % mark = k1 % mark 
于是记录下模2520和当前lcm(程序中为mark),判断下模2520余出来的那部分能否整除当前lcm即可
为方便存储,mark一共只有4 * 3 * 2 * 2 = 48种(分别代表2,3,5,7在小于10可能取到的幂数),hash一下节省空间

话说这样的空间消耗,真怕会爆掉的。。。但在codeforce里慢慢地跑了300ms+过了Accepted。。。
还有更进一步优化,详见http://codeforces.ru/blog/entry/1109?locale=en
**************************/


Dify知识库文档批量下载神器:一键导出所有文件到本地 在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的 阅读详情

相关推荐

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 936

codeforces55D Beautiful numbers

题意:统计某段区间内满足它所有非零数位能整除这个数本身的数的个数。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.PrintWriter; import java.math.BigInteger; import java.util.Arrays; import jav

老李2009 409

别再只会插卡了!用示波器实测SIM卡上电时序与通信波形(附故障排查)

本文深入解析了SIM卡通信的电气信号与时序规则,通过示波器实测波形揭示SIM卡上电时序与通信协议的关键细节。从VCC、CLK、RST、DATA四路信号的协同工作,到ATR(Answer to Reset)的解析,再到常见故障的波形诊断与排查方法,为硬件工程师提供了实用的调试指南。文章还分享了高级调试技巧与现代化工具链搭建建议,帮助提升物联网设备SIM卡通信的可靠性与效率。

weixin_42567279的博客 328

CodeForces 55D Beautiful numbers(数位dp&&离散化)

题目链接:[kuangbin带你飞]专题十五 数位DP A - Beautiful numbers题意ps:第一道数位dp,题真好,虽然是参考大牛方法悟过才a,但仍收获不少。 求一个区间内的Beautiful numbers有多少个。Beautiful numbers指:一个数能整除所有组成它的非0数字。 例如15可以被1和5整除,所以15是Beautiful numbers。 思路 Be

YiShi's Blog 5095

c语言播放背景音乐

相信很多童鞋都在为大学课设而伤透头脑,而背景音乐的使用无疑会成为其中的一个亮点(总比没有好吧(╯▽╰)),故接下来我将介绍一下如何用C播放音乐。我用的编译器是CodeBlocks16.01接下来新建一个C文件建立完后是这样滴然后添加其中mciSendString()函数是由&lt;mmsystem.h&gt;库提供的供播放音乐(MP3)的函数第一个参数是歌曲所在的绝对路径 打开音乐所在位置 复制这...

qq_41443987的博客 3万+

Linux 常用命令大全(2025 最新版)

掌握这些命令,你已能应对80% 的 Linux 日常操作!更多高级技巧(如crontab定时任务、iptables防火墙配置)可参考手册(man 命令名)或官方文档。实践是学习命令的最佳方式,建议在虚拟机或云服务器中多动手操作!

2302_79600390的博客 1905

Codeforces刷题之路——122A Lucky Division

A. Lucky Division time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Petya loves lucky numbers. Everybody know

莫欺少年穷 1835

PFC胶结模型实战:从线性到平行粘结的力学行为解析

本文深入解析了PFC中线性接触与平行粘结(pb模型)的核心差异与应用。平行粘结模型通过模拟胶结层的力学行为,能够有效传递拉力和抵抗弯矩,是模拟岩石、混凝土等胶结材料的关键。文章详细介绍了其变形与强度参数的设置、法向与切向行为的验证方法,并揭示了全量与增量力计算中易出现的“幽灵力”问题及其解决方案,为复杂模型的构建与调试提供了实用策略。

weixin_29230773的博客 1208

Codeforce 55D Beautiful numbers

Beautiful numbers 题意:挑选出数字,这些数字能被他们的非0位整除。 思路:数位DP,由于1~9的最大公倍数是2520,dp[][维护对2520的余数][已经统计到的余数],再对有可能用到的余数进行离散化。 代码如下: #include<iostream> #include<cstring> #include<cstdio> #incl...

201

零承诺的启动之路:详解 SAP BTP 的 Pay-As-You-Go for SAP BTP(含案例与迁移策略)

SAP BTP的Pay-As-You-Go(PAYG)模式为零承诺的按需付费方案,适合PoC和小规模上线场景。它提供生产环境直接启用服务的能力,按月后付标准目录价,无预付和折扣。PAYG可与BTP企业协议(BTPEA/CPEA)混合使用,用量稳定后可平滑迁移至CPEA获取更好财务条款。关键优势在于灵活开启/关闭服务,支持通过SAP Discovery Center估算费用,并配合成本治理工具控制支出。该模式适用于创新项目初期,当业务规模可预测时再考虑转为承诺型消费模式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 248

宇树G1语音助手完整开发指南(上)——从零构建智能知识库对话系统

本文将详细介绍如何为宇树G1人形机器人开发一个,实现"唤醒 → 对话 → 查询 → 回复"的智能助手功能。

m0_47999117的博客 786

codeforce 55D D. Beautiful numbers(数位dp)

D. Beautiful numberstime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputVolodya is an odd boy and his taste is strange as well. It seems to him that a...

albertluf的博客 270

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

codeforce 55 D. Beautiful numbers(数位dp,好题)

题目链接 D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Volodya is an odd boy and his

fouzhe的博客 521

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

codeforces55D. Beautiful numbers(数位dp+数论)

传送门:http://codeforces.com/problemset/problem/55/D 题目大意: 求在[l,r]中能够整除自己每个数位上的数字的数的个数。 首先给出解这道题需要知道的一个知识:sum%(x*n) %x == sum%x。这个公式的原理其实想想就知道。 题目分析: 首先我们能够知道如果这个数能够整除它的每个数位上的数

Rain 619

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

2021-07-08-Beautiful numbers CodeForces - 55D(数位DP+模板)

Beautiful numbers CodeForces - 55D 1.果然,决心刷一个专题的时候,不需要立即就将正在做的题目理解。可以先多看看其他的题目,有时候,见的多了,思维发散了,自然而然就理解了(其实现在还没有完全理解,但是感受到了数位DP是怎样一个套路) 2. 题意: 给定两个数l,r(1<=l<=r<=9e18),求[l,r]间漂亮数的个数(漂亮数:能被所有非0数位整除的数) 题解: 1.参考:Beautiful numbers CodeForces - 55D(数位DP)

I_have_a_world的博客 249

【数位dp && 优化数组范围】CodeForces - 55D Beautiful numbers

Problem Description 输入T组测试数据,每组测试数据输入一组区间范围。让你求区间范围内有多少个数是美丽的数。 美丽的数:数 能被 自身各位数整除(不包括0)那么这个数就是美丽的数。 例如: 120 能被1整除 同时 也能被2整除,所以它是一个美丽的数。 思路: 这题得用到的前置技能,大整数取模 123%5 = ( (1*10+2)%5 ...

ACMer 梁剑锋 的博客 255

codeforces 55D D. Beautiful numbers(数位dp+数论)

题目传送门: codeforce 55D 题意简单就不说了 思路: 要用到数论的知识。详细解释,推荐一个网址:传送门 注意hash的方式有很多种。hash的目的是为减少空间浪费了。 话不多说,上代码。 AC code: #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&l...

我们花时间收集,却忘了最重要的其实是花时间去消化 361

【数位dp】Beautiful numbers CodeForces - 55D

Beautiful numbers  CodeForces - 55D 碰到的第二类数位dp的问题:求被整除的个数 这一种不同的特征在于余数,所以将余数作为dp的变量。 这题比较麻烦,题意简单的来说是:找(非0)的所有位数都能整除这个数的数。 要使所有非0位数整除这个数,那么 这个数%这些非0位数的最小公倍数==0。 那么不同的特征不仅在余数,还有最小公倍数上。 因为最小公

学无纸巾 328

Codeforces-55D Beautiful numbers

数位DP 数学

a free man 661

CodeForces 55D Beautiful numbers(数位dp)

CodeForces 55D题目求给定区间内的能被自己的每一非零位整除的数的个数思路http://www.cnblogs.com/algorithms/archive/2012/09/02/2668021.html dp[pos][mod][lcm],pos表示当前位,mod表示对2520取模,lcm表示位数的最小公倍数,离散化,取2520等处理优化的很好。代码#include<iostream

天道酬勤 898

CodeForces - 55D——Beautiful numbers (数位DP)

题目链接:https://codeforces.com/problemset/problem/55/D 题意:找出区间【l,r】内一个数能被自已每位数整除的数的个数。 思路:数位dp,两个判定状态,一个是数的值x,一个是自己每个位数的最小公倍数lca。 数的值很大,可以优化数的值,x%lca=x%(n*lca)%lca=x%(lca(1 2 3....9))%lca=x...

creator平 242

Codeforces-55D Beautiful numbers

数位DP第一题#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;cmath&gt; using namespace std; const int N=20; const int M=2520; typedef long long ...

wl16wzl的博客 217

codeforces 55D. Beautiful numbers(数位dp)

题目链接:【codeforces 55D】 美丽的数x:x能整除它本身的非零的数字 问l~r之间的美丽的数的个数(1 1~9的最小公倍数是2520,从左往右搜,每次记录mod2520后的余数,到目前数字为止的最小公倍数(要用has离散化,否则会超内存) #include #include #include #include #include using namespace std

小小西北风 598
上一篇: HDU 3652 B-number
下一篇: HDU 3913 Suffix
cmonkey
博客等级 码龄17年 50粉丝 47原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值