51nod 1232 完美数
题目思路:数位dp,若这个数能被每位的非0数整除,那么这个数一定可以被每一位数的lcm整除,lcm(1,2,3,4,5,6,7,8,9) = 2520,所以可以通过将这个数对2520取模来压缩空间,取模结果计做mod
dp[pos][lcm][mod],显然20*2520*2520仍然过大,所以我们对mod进行离散,再次压缩空间。
#include <iostream>
#include <cmath>
#include <string.h>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
#define LL long long
#define MAXSIZE 2600
#define INF 0x3f3f3f3f LL dp[][][MAXSIZE];
const LL Mod = ; int bit[MAXSIZE],ha[MAXSIZE]; LL gcd(LL n,LL m)
{
if(n%m == )
return m;
return gcd(m,n%m);
} void Init()
{
int pos = ;
for(int i=;i<=Mod;i++)
{
if(%i == )
ha[i] = pos++;
}
} LL dfs(int pos,int lcm,int mod,int limit)
{
if(pos < )
{
if(mod%lcm == )
return ;
return ;
} if(dp[pos][ha[lcm]][mod] != - && !limit)
return dp[pos][ha[lcm]][mod]; LL ans = ;
int len = limit?bit[pos]:;
for(int i=;i<=len;i++)
{
if(i != )
{
int new_lcm = lcm*i/(gcd(lcm,i));
int num = (mod*+i)%Mod;
ans += dfs(pos-,new_lcm,num,limit&&i==len);
} else
{
int num = mod*%Mod;
ans += dfs(pos-,lcm,num,limit&&i==len);
}
}
if(!limit)
dp[pos][ha[lcm]][mod] = ans;
return ans;
} LL Solve(LL n)
{
int pos = ;
while(n)
{
bit[pos++] = n%;
n /= ;
}
LL ans = dfs(pos-,,,);
return ans;
} int main()
{
Init();
int T;
LL n,m;
scanf("%d",&T);
memset(dp,-,sizeof(dp));
while(T--)
{
scanf("%lld%lld",&n,&m);
LL ans = Solve(m) - Solve(n-);
printf("%lld\n",ans);
}
return ;
}
51nod 1232 完美数的更多相关文章
- 51nod 1232 完美数 数位dp
1232 完美数 题目来源: 胡仁东 基准时间限制:2 秒 空间限制:131072 KB 如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都 ...
- 华为OJ平台——完美数
import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...
- SDUT 1220 完美数
完美数 Time Limit: 1000ms Memory limit: 65536K 题目描述 任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数. 如6的所有真 ...
- 1000以内完全数(完美数)获取实现---基于python
"""题目: 如果一个数恰好等于它的因子之和,则称该数为"完全数" .各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的 ...
- [51nod1232]完美数
如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都是完美数,但是13就不是完美数(因为13不能被数字3整除). 现在给定正整数x,y,求x和y ...
- [Swift]LeetCode507. 完美数 | Perfect Number
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...
- Leetcode 507.完美数
完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False 示例: ...
- 507 Perfect Number 完美数
对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”.给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False示例:输入: 28输出: True解释: ...
- Java实现 LeetCode 507 完美数
507. 完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False ...
随机推荐
- selenium官方网站文档,testng官方网站文档
selenium 阅读至grid部分,当前没有远程需求,搁置:https://www.seleniumhq.org/docs/07_selenium_grid.jsp testng http://te ...
- webDriver文档阅读笔记
一些雷 浏览器版本和对应的Driver的版本是一一对应的,有时候跑不起来,主要是因为driver和浏览器版本对不上. e.g: chrome和driver版本映射表:https://blog.csdn ...
- 22. Generate Parentheses(ML)
22. Generate Parentheses . Generate Parentheses Given n pairs of parentheses, write a function to ge ...
- Tomcat7 1000并发量配置以及配置优化
首先,修改tomcat/conf/server.xml配置文件. 其次,修改tomcat/bin/catalina.bat配置文件为以下. 主要修改了maxThreads.accept ...
- oracle出现无法响应新的请求,报ora-12516错误
oracle的会话数超出了限制,一般都是由于多次connect建立多个连接会话引起. 解决办法: (oracle登录后台,1)sqlplus /nolog 2)conn / as sysdba) ...
- 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac
[简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...
- kubernetes yaml格式的Pod配置文件
kubernetes yaml文件解析 # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: #必 ...
- zookeeper安装(集群)
Dubbo 建议使用Zookeeper 作为服务的注册中心.Zookeeper 集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的.正是基于这个特性,要将ZK 集群的节点数量要为奇数(2 ...
- 阅读:ECMAScript 6 入门(3)
参考 ECMAScript 6 入门 ES6新特性概览 ES6 全套教程 ECMAScript6 (原著:阮一峰) JavaScript 教程 重新介绍 JavaScript(JS 教程) 字符串的扩 ...
- ACM-ICPC 2018 南京赛区网络预赛 B The writing on the wall(思维)
https://nanti.jisuanke.com/t/30991 题意 一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子. 分析 参考https://bl ...