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 ...
随机推荐
- mfc 中的error RC2104 : undefined keyword or key name
http://bbs.csdn.net/topics/340253236 需要在此文件中添加该按钮 声明一下. 但是在resource.h中已经定义了:#define IDC_ETHCONF_CHKP ...
- DK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME
根据提示,我们可以新建一个项目或者以前自己使用过没问题的工程,从中把local.properties文件copy到我们从github中想要导入的工程中,我自己就是这样的,然后这个问题就解决了. ndk ...
- getchar(),scanf(),gets(),cin,输入字符串
#include<iostream>#include<stdio.h>#include<string.h>#include<string>using n ...
- mysql写shell小技巧
set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...
- python: 多态与虚函数;
通过python的abc模块能够实现虚函数: 首先在开头from abc import ABCMeta, abstractmethod 例子 : #!/usr/bin/python #coding ...
- django补充
通过表名获取app的name models.UserInfo._meta.app_label >>> from repository import models >>&g ...
- BZOJ2157 边转点 树链剖分
https://www.lydsy.com/JudgeOnline/problem.php?id=2157 现在就是后悔,非常后悔 本来想随便拿个树剖热身,不料开了个毒瘤题. 题意:动态维护一棵树上的 ...
- 如何优雅地使用Sublime Text3
此文非原创,出处见文章结尾. 一.Sublime Text 3插件安装 优雅使用Sublime Text,插件则是不可缺少的存在:而插件的备份就显得非常的重要(譬如:各平台同步:更换系统/电脑,迅速使 ...
- 设计模式---数据结构模式之迭代器模式(Iterate)
一:概念 迭代模式是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式. 在应用Iterator模式之前,首先应该明白Iterator ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...