pku 1152 An Easy Problem!
2010-07-31 19:49
232 查看
题意:输入一个数问这个数是在2-64进制中 哪个进制下的最大值。
算法思路:(来源discuss讨论区)
设输入的是abcd,假设其解是n进制,则有
(a*n*n*n + b*n*n + c*n + d)%(n-1)=0
则有:( (a*n*n*n)%(n-1)+ (b*n*n)%(n-1)+ (c*n)%(n-1)+ d )%(n-1)=0
则有:( (a* (n%(n-1)) *(n%(n-1)) *(n%(n-1)))+ (b* (n%(n-1)) *(n%(n-1)))+(c* (n%(n-1) +d ) %(n-1)=0
则有: (a*1*1*1+b*1*1+c*1+d)%(n-1)=0
则有:(a+b+c+d)%(n-1)=0
注意:
If number with such condition is not possible output the line "such number is impossible!" For each line of input there will be only a single line of output. The output will always be in decimal number system.(有可能是没有结果的情况)
代码:
#include <stdio.h>
#include <string.h>
char a[30005];
int main()
{
int i,len,f,flag;
__int64 sum;
while( scanf("%s",a)!=EOF )
{
len=strlen(a);
sum=0;
f=1;//记录的是在该数字中每个位置中最大的数字,比如:15 你算出的最大的进制为4,但是显然是不正确的答案。
for(i=0;i<len;i++)
{
if( a[i]>='0' && a[i]<='9' )
{
sum=sum+(a[i]-'0');
if( a[i]-'0'>f )
f=a[i]-'0';
}
else if( a[i]>='A' && a[i]<='Z' )
{
sum=sum+(a[i]-55);
if( a[i]-55>f )
f=a[i]-55;
}
else
{
sum=sum+(a[i]-61);
if( a[i]-61>f )
f=a[i]-61;
}
}
flag=1;
for(i=2;i<=62;i++)
{
if( sum%(i-1)==0 && i>f )
{
flag=0;
printf("%d/n",i);
break;
}
}
if( flag )
printf("such number is impossible!/n");
}
return 0;
}
算法思路:(来源discuss讨论区)
设输入的是abcd,假设其解是n进制,则有
(a*n*n*n + b*n*n + c*n + d)%(n-1)=0
则有:( (a*n*n*n)%(n-1)+ (b*n*n)%(n-1)+ (c*n)%(n-1)+ d )%(n-1)=0
则有:( (a* (n%(n-1)) *(n%(n-1)) *(n%(n-1)))+ (b* (n%(n-1)) *(n%(n-1)))+(c* (n%(n-1) +d ) %(n-1)=0
则有: (a*1*1*1+b*1*1+c*1+d)%(n-1)=0
则有:(a+b+c+d)%(n-1)=0
注意:
If number with such condition is not possible output the line "such number is impossible!" For each line of input there will be only a single line of output. The output will always be in decimal number system.(有可能是没有结果的情况)
代码:
#include <stdio.h>
#include <string.h>
char a[30005];
int main()
{
int i,len,f,flag;
__int64 sum;
while( scanf("%s",a)!=EOF )
{
len=strlen(a);
sum=0;
f=1;//记录的是在该数字中每个位置中最大的数字,比如:15 你算出的最大的进制为4,但是显然是不正确的答案。
for(i=0;i<len;i++)
{
if( a[i]>='0' && a[i]<='9' )
{
sum=sum+(a[i]-'0');
if( a[i]-'0'>f )
f=a[i]-'0';
}
else if( a[i]>='A' && a[i]<='Z' )
{
sum=sum+(a[i]-55);
if( a[i]-55>f )
f=a[i]-55;
}
else
{
sum=sum+(a[i]-61);
if( a[i]-61>f )
f=a[i]-61;
}
}
flag=1;
for(i=2;i<=62;i++)
{
if( sum%(i-1)==0 && i>f )
{
flag=0;
printf("%d/n",i);
break;
}
}
if( flag )
printf("such number is impossible!/n");
}
return 0;
}
相关文章推荐
- PKU 1152 An Easy Problem!
- POJ 1152 An Easy Problem! (取模运算性质)
- poj——1152——An Easy Problem!
- 【解题报告】PKU 2826 An Easy Problem?!
- POJ 1152 An Easy Problem!(进位制)
- POJ 1152 An Easy Problem! 笔记
- Poj 1152 An Easy Problem!
- poj-1152 An Easy Problem!
- POJ-1152 An Easy Problem! 解题报告(数论) 是不是N进制数
- poj_1152_An Easy Problem!(进制)
- PKU 2453 An Easy Problem
- POJ 1152 An Easy Problem! (取模运算性质)
- POJ 1152 An Easy Problem
- An easy problem
- HDU2132 An easy problem 【Java】
- POJ2826:An Easy Problem?!——题解(配特殊情况图)
- HDOJ(HDU) 2132 An easy problem
- HDU2055_An easy problem
- B - An easy problem
- 【树链剖分】 HDU 4729 An Easy Problem for Elfness 二分