zoukankan      html  css  js  c++  java
  • 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         else
    27             return (int) (c - '0');
    28     }
    29 }
    View Code
  • 相关阅读:
    样式
    读取网页图片(包含代理)
    C# 替换“换行符”写法
    Iframe中弹出消息问题
    程序list
    C#对象序列化
    软件工程——个人总结
    软件工程——团队作业4
    软件工程———团队答辩
    软件工程--团队作业三
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/4017878.html
Copyright © 2011-2022 走看看