当进制转换后所剩下的为数较少时(2位。3位),相应的base都比較大。能够用数学的方法计算出来。

预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算。

。。

Lucky Number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 521    Accepted Submission(s): 150

Problem Description
“Ladies and Gentlemen, It’s show time! ”



“A thief is a creative artist who takes his prey in style... But a detective is nothing more than a critic, who follows our footsteps...”



Love_Kid is crazy about Kaito Kid , he think 3(because 3 is the sum of 1 and 2), 4, 5, 6 are his lucky numbers and all others are not. 



Now he finds out a way that he can represent a number through decimal representation in another numeral system to get a number only contain 3, 4, 5, 6. 



For example, given a number 19, you can represent it as 34 with base 5, so we can call 5 is a lucky base for number 19. 



Now he will give you a long number n(1<=n<=1e12), please help him to find out how many lucky bases for that number. 



If there are infinite such base, just print out -1.
 
Input
There are multiply test cases.



The first line contains an integer T(T<=200), indicates the number of cases. 



For every test case, there is a number n indicates the number.
 
Output
For each test case, output “Case #k: ”first, k is the case number, from 1 to T , then, output a line with one integer, the answer to the query.
 
Sample Input
2
10
19
 
Sample Output
Case #1: 0
Case #2: 1
Hint
10 shown in hexadecimal number system is another letter different from ‘0’-‘9’, we can represent it as ‘A’, and you can extend to other cases.
 
Author
UESTC
 
Source
 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <cmath> using namespace std; typedef long long int LL; LL n;
set<LL> ans;
bool change(LL x,LL base)
{
bool flag=true;
while(x)
{
LL temp=x%base;
x/=base;
if(temp>=3LL&&temp<=6LL) continue;
else
{
flag=false;
break;
}
}
return flag;
} int main()
{
int T_T,cas=1;
scanf("%d",&T_T);
while(T_T--)
{
ans.clear();
cin>>n;
if(n>=3LL&&n<=6LL)
{
cout<<"Case #"<<cas++<<": -1"<<endl; continue;
} for(LL a=3;a<=6;a++)
{
for(LL b=3;b<=6;b++)
{
LL limit=max(a,b);
if( (n-b)%a == 0 )
{
if( (n-b)/a > limit)
{
ans.insert((n-b)/a);
}
}
}
} for(LL a=3;a<=6;a++)
{
for(LL b=3;b<=6;b++)
{
for(LL c=3;c<=6;c++)
{
LL C=c-n;
if(b*b >= 4LL*a*C )
{
LL deta=sqrt(b*b-4LL*a*C);
LL base1=(-b+deta)/(2*a);
LL base2=(-b-deta)/(2*a);
LL limit=max(a,max(b,c));
if(a*base1*base1+b*base1+c==n && base1>limit)
{
ans.insert(base1);
}
if(a*base2*base2+b*base2+c==n && base2>limit)
{
ans.insert(base2);
}
}
}
}
} for(LL i=4;i*i*i<=n;i++)
{
if(change(n,i))
{
ans.insert(i);
}
}
cout<<"Case #"<<cas++<<": "<<ans.size()<<endl;
}
return 0;
}

HDOJ 4937 Lucky Number的更多相关文章

  1. 枚举 + 进制转换 --- hdu 4937 Lucky Number

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  2. HDU 4937 Lucky Number(2014 Multi-University Training Contest 7)

    思路:先枚举  a*bas +b = n  求出 bas 在sqrt(n)到n的  (bas>a&&bas>b) 再枚举  a*bas*bas+b*bas+c =n  求出 ...

  3. HDU 4937 Lucky Number (数学,进制转换)

    题目 参考自博客:http://blog.csdn.net/a601025382s/article/details/38517783 //string &replace(iterator fi ...

  4. 2014多校第七场1003 || HDU 4937 Lucky Number

    题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数 ...

  5. hdu 4937 Lucky Number

    虽然算法清晰的不能再清晰,但是实现总是边角料错这错那. 题目大意: 给出n,找出一些进制,使得n在该进制下仅为3,4,5,6表示 解题思路: 首先,4-10000进制直接枚举计算出每一位 此外,最多只 ...

  6. HDU 4937 Lucky Number 规律题_(:зゝ∠)_

    把全部合法的进制打出来会发现合法的进制都是在 n/3 n/4 n/5的边上 然后暴力边上的进制数.. #include <cstdio> #include <set> type ...

  7. HDU 4937 Lucky Number 搜索

    题意: 给你一个数,求在多少种不同的进制下这个数每一位都是3.4.5.6中的一个. 思路: 搜索.枚举这个数在任意进制下的表示,判断是否合法.当数字只有3.4.5.6时,必定有无穷种. 因为数字太大, ...

  8. 水题 HDOJ 4727 The Number Off of FFF

    题目传送门 /* 水题:判断前后的差值是否为1,b[i]记录差值,若没有找到,则是第一个出错 */ #include <cstdio> #include <iostream> ...

  9. SCU3502 The Almost Lucky Number

    Description A lucky number is a number whose decimal representation contains only the digits \(4\) a ...

随机推荐

  1. C#自定义List类

    代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac ...

  2. LDAP索引及缓存优化

    一.设置索引 索引将查找信息和 Directory Server 条目关联起来. Directory Server支持以下几种索引: 1出现索引 (pres) - 列出了具有特定属性的条目,与属性的值 ...

  3. eclipse 插件 最新 eclipse4.x 插件

    Properties  Editor:  中文显示属性配置文件 help ——> install new  SoftWare ——>add Name: xx Location: http: ...

  4. java线层的使用

    class Do3 { public static void main(String[] args) { XC d1=new XC("小王"); XC d2=new XC(&quo ...

  5. JDK6和JDK7中的substring()方法

    substring(int beginIndex, int endIndex)在JDK6与JDK7中的实现方式不一样,理解他们的差异有助于更好的使用它们.为了简单起见,下面所说的substring() ...

  6. 数位dp整理

    数位dp的思想就在于递归,记录当前的某一个唯一状态,依次递归下去,要注意唯一. 数位dp常设的状态有当前位置,上一数字,是否具有前导零,是否有限制. 1.CodeForces 55DBeautiful ...

  7. ZOJ3551 Bloodsucker(概率dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Bloodsucker Time Limit: 2 Seconds      Me ...

  8. SuperMap

    SuperMap iClient for JavaScript 新手入门 地理信息系统(英语:Geographic Information System,缩写:GIS)是一门综合性学科,结合地理学与地 ...

  9. 为什么针对XML的支持不够好?如何改进?

    为什么针对XML的支持不够好?如何改进? 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurati ...

  10. .net core3