首页 > 代码库 > UVa 10093 - An Easy Problem!
UVa 10093 - An Easy Problem!
题目:给你一个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!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。