首页 > 其他 > 详细

UVa 10093 - An Easy Problem!

时间:2015-01-26 06:35:49      阅读:1259      评论:0      收藏:0      [点我收藏+]

题目:给你一个62进制的数字R,找到最小的N使得R整除N-1。

分析:数论。从小到大枚举N即可,最小值为出现的字符中最大的值+1,最大值为62。

说明:注意数据可能很长,计算时保留余数即可。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

char list[63] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int  maps[128];

int  deal(char* buf)
{
	int min = 2;
	for (int i = 0 ; buf[i] ; ++ i)
		if (min <= maps[buf[i]])
			min = maps[buf[i]]+1;
	for (int i = min ; i < 63 ; ++ i) {
		int r = 0;
		for (int j = 0 ; buf[j] ; ++ j)
			r = (r*i+maps[buf[j]])%(i-1);
		if (r == 0) return i;
	}
	return -1;
}

int main()
{
	for (int i = 0 ; list[i] ; ++ i) 
		maps[list[i]] = i;
	char buf[10000];
	while (~scanf("%s",buf)) {
		int v = deal(buf);
		if (v != -1) printf("%d\n",v);
		else printf("such number is impossible!\n");
	}
    return 0;
}



UVa 10093 - An Easy Problem!

原文:http://blog.csdn.net/mobius_strip/article/details/43136493

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!