题目思路:数位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 完美数的更多相关文章

  1. 51nod 1232 完美数 数位dp

    1232 完美数 题目来源: 胡仁东 基准时间限制:2 秒 空间限制:131072 KB  如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都 ...

  2. 华为OJ平台——完美数

    import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...

  3. SDUT 1220 完美数

    完美数 Time Limit: 1000ms   Memory limit: 65536K 题目描述 任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数. 如6的所有真 ...

  4. 1000以内完全数(完美数)获取实现---基于python

    """题目: 如果一个数恰好等于它的因子之和,则称该数为"完全数" .各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的 ...

  5. [51nod1232]完美数

    如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都是完美数,但是13就不是完美数(因为13不能被数字3整除). 现在给定正整数x,y,求x和y ...

  6. [Swift]LeetCode507. 完美数 | Perfect Number

    We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...

  7. Leetcode 507.完美数

    完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False 示例: ...

  8. 507 Perfect Number 完美数

    对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”.给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False示例:输入: 28输出: True解释: ...

  9. Java实现 LeetCode 507 完美数

    507. 完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False ...

随机推荐

  1. mfc 中的error RC2104 : undefined keyword or key name

    http://bbs.csdn.net/topics/340253236 需要在此文件中添加该按钮 声明一下. 但是在resource.h中已经定义了:#define IDC_ETHCONF_CHKP ...

  2. DK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME

    根据提示,我们可以新建一个项目或者以前自己使用过没问题的工程,从中把local.properties文件copy到我们从github中想要导入的工程中,我自己就是这样的,然后这个问题就解决了. ndk ...

  3. getchar(),scanf(),gets(),cin,输入字符串

    #include<iostream>#include<stdio.h>#include<string.h>#include<string>using n ...

  4. mysql写shell小技巧

    set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...

  5. python: 多态与虚函数;

    通过python的abc模块能够实现虚函数: 首先在开头from abc import   ABCMeta, abstractmethod 例子 : #!/usr/bin/python #coding ...

  6. django补充

    通过表名获取app的name models.UserInfo._meta.app_label >>> from repository import models >>&g ...

  7. BZOJ2157 边转点 树链剖分

    https://www.lydsy.com/JudgeOnline/problem.php?id=2157 现在就是后悔,非常后悔 本来想随便拿个树剖热身,不料开了个毒瘤题. 题意:动态维护一棵树上的 ...

  8. 如何优雅地使用Sublime Text3

    此文非原创,出处见文章结尾. 一.Sublime Text 3插件安装 优雅使用Sublime Text,插件则是不可缺少的存在:而插件的备份就显得非常的重要(譬如:各平台同步:更换系统/电脑,迅速使 ...

  9. 设计模式---数据结构模式之迭代器模式(Iterate)

    一:概念 迭代模式是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式. 在应用Iterator模式之前,首先应该明白Iterator ...

  10. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...