首页 > 代码库 > URAL 1104 Don’t Ask Woman about Her Age(数论)
URAL 1104 Don’t Ask Woman about Her Age(数论)
题目链接
题意 : 给你一个数,未知进制,然后让你从2到36进制中找出一个最小的进制K,满足给你的这个数作为k进制时能够整除k-1。
思路 : 有一个公式,(a*b^n)mod(b-1)=a;
给定你这个数,当做字符串输入的时候,这个数转化成10进制的结果应该是:a[0]*k^(n-1)+a[1]*k^(n-2)+……+a[n-1]*k^0,然后题目要求的就是这个式子的结果取余(k-1)为0,
经过最开始给出的公式,将该式子化简得(a[0]+a[1]+……+a[n-1])%(k-1),所以只要满足这个数的每一位加起来对k-1取余为0即可。
1 import java.io.BufferedInputStream; 2 import java.util.Scanner; 3 4 public class ural { 5 public static void main(String[] args) { 6 Scanner cin = new Scanner(new BufferedInputStream(System.in)); 7 String s = cin.nextLine(); 8 int sum = 0; 9 int mink = 2;10 for (int i = 0; i < s.length(); i++) {11 sum += c2i(s.charAt(i));12 if (c2i(s.charAt(i)) >= mink)13 mink = c2i(s.charAt(i)) + 1;14 }15 for (int k = mink; k <= 36; k++) {16 if (sum % (k - 1) == 0) {17 System.out.println(k);18 return;19 }20 }21 System.out.println("No solution.");22 }23 public static int c2i(char c) {24 if (‘A‘ <= c && c <= ‘Z‘)25 return (int) (c - ‘A‘) + 10;26 else27 return (int) (c - ‘0‘);28 }29 }
URAL 1104 Don’t Ask Woman about Her Age(数论)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。