试题 算法训练 Rotatable Number

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  Bike是个十分喜欢数学的聪明孩子。他发明了“可旋转数”,其灵感来自于142857。

  正如你所见,142857是一个十分神奇的数,因为所有从它通过旋转得到的数都是它自己乘以1,2,3…,6(从1到数的长度)。旋转一个数就是将它的最后一位数字放到最前面。比如说,通过旋转12345你能够得到这些数:12345,51234,45123,34512,23451。值得一提的是这里允许有前导0。因而4500123和0123450都能够通过旋转0012345得到。你可以看看142857满足条件的原因了。下面的6个方程都在十进制下成立:

  142857 * 1 = 142857;

  142857 * 2 = 285714;

  142857 * 3 = 428571;

  142857 * 4 = 571428;

  142857 * 5 = 714285;

  142857 * 6 = 857142

  现在,Bike提出了一个问题。他将“可旋转数”推广到了任意进制b。如上所示,142857是十进制下的一个“可旋转数”。另外一个例子是二进制下的0011。下面的4个方程都在二进制下成立:

  0011 * 1 = 0011;

  0011 * 10 = 0110;

  0011 * 11 = 1001;

  0011 * 100 = 1100

  他想要找到最大的b(1 < b < x),满足在b进制下存在一个长度为n的正“可旋转数”(允许有前导零)。

输入格式

  仅一行包含两个用空格分隔的整数n,x。

输出格式

  一行一个整数,表示你找到的最大的b。如果不存在满足条件的b,输出-1。

样例输入I

  6 11

样例输出I

  10

样例输入II

  5 8

样例输出II

  -1

数据规模和约定

  对于20%的数据,n <= 10, x <= 15

  对于50%的数据,x <= 10

  对于100%的数据,1 <= n <= 5 * 10^6,2 <= x <= 10^9


import java.util.Scanner; public class Main {
public static void main(String[] args) {
// 转自: https://blog.csdn.net/a1439775520
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
sc.close();
if (n==1&&x==3) {
System.out.println(2);
return;
}
if (!isPrime(n + 1)) {
System.out.println(-1);
return;
}
for (int i = x - 1; i >1; i--) {
if (isRoot(i, n + 1)) {
System.out.println(i);
return;
}
}
System.out.println(-1);
} private static boolean isRoot(long a, long p) {
if (a%p==0) {
return false;
}
for (int i = 1; i * i <= p - 1; i++) {
if ((p - 1) % i == 0) {
if (i < p - 1 && ex(a, i, p) == 1) {
return false;
}
if ((p - 1) / i < p - 1 && ex(a, (p - 1) / i, p) == 1) {
return false;
}
}
}
return true;
} private static long ex(long a, long n, long p) {
if (n == 0) {
return 1 % p;
}
long res = 1;
while (n != 0) {
if ((n & 1) == 1) {
res = res * a % p;
}
n >>= 1;
a = a * a % p;
}
return res;
} private static boolean isPrime(long n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
} }

最新文章

  1. react-native Simulator com+r不能刷新模拟器
  2. Android中点击隐藏软键盘最佳方法——Android开发之路4
  3. hdu 5384 Danganronpa
  4. mac os 下搭建android开发环境
  5. PHP采集curl应用的一点小疑惑
  6. 当利用pip安装模块出现错误时咋办
  7. JS 正则表达式详解
  8. express-9 Handlebars模板引擎(2)
  9. jquery是如何架构的.
  10. [WinAPI] API 6 [操作驱动器挂载点]
  11. SA
  12. [Angular2 Router] Programmatic Router Navigation via the Router API - Relative And Absolute Router Navigation
  13. ASP.NET MVC4 UEditor 的上传图片配置路径
  14. BeyondCompare两个文件中同一行字符长度不一致的文件对比,比如pi文件对比(xjl456852原创)
  15. Microsoft Accelerator for Windows Azure Alum Azuqua 今天启动
  16. JAVA web.xml中引用多个XML
  17. ABAP Open SQL 分页查询
  18. MYSQL配置主从同步
  19. 【CodeForces 730H】Delete Them
  20. 关于Kafka broker IO的讨论

热门文章

  1. matlab 调用C程序进行simulink仿真
  2. 利用一个VI写入或读取另一个VI的控件值
  3. python语法学习第五天--lambda表达式、filter()、map()
  4. 安装laravel环境之homestead(for mac)
  5. JS导出页面为PDF文件,该如何操作?来看一眼就明白啦!
  6. java -&gt;多线程_线程同步、死锁、等待唤醒机制
  7. eclipse导入工程报错-项目或者文件有红叉的解决方案
  8. ql的python学习之路-day12
  9. apache httpd 不记录head 的请求。
  10. JS 把数字转换成字母