题目https://www.luogu.org/problemnew/show/P1050

题意:给定一个数$n$,问$n$的幂次的最低$k$位的循环节是多少。

思路:这真是我做过最难的java大数了!!!!【我太菜了】

六月去清华的机试题之一,当时觉得好像很眼熟没做出来。拖延症患者今天终于参考着题解写完了,现在想想没做出来也能原谅自己了....

若循环节为$a_1$,那么其实需要同时满足最低1位循环,最低2位循环,最低3位循环.......

也就是说$a_1$应该是,最低的这$k$位循环的公倍数。

所以我们枚举位数,最后$i$位的循环节肯定是$i-1$循环节的倍数。

所以要先求一下最低$i$位的$ans$幂次,然后以这个为倍数去找是否出现循环。如果超过10还没有循环说明肯定不会循环了,因为数字只有0~9

【可能我自己也写得糊里糊涂的所以题解也写得糊里糊涂得dbq】

 import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Comparator;
import java.util.Scanner; public class Main {
static Scanner scan = new Scanner(System.in);
static BigInteger one[] = {BigInteger.valueOf(1), BigInteger.valueOf(1), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(2),
BigInteger.valueOf(1), BigInteger.valueOf(1), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(2)}; static BigInteger n;
static int k; static BigInteger quick_pow(BigInteger a, BigInteger b, BigInteger mod){
BigInteger res = BigInteger.ONE;
BigInteger tmp = a;
while(b.compareTo(BigInteger.ZERO) != 0){
if(b.mod(BigInteger.valueOf(2)).compareTo(BigInteger.valueOf(1)) == 0){
res = res.multiply(tmp).mod(mod);
}
tmp = tmp.multiply(tmp).mod(mod);
b = b.divide(BigInteger.valueOf(2));
}
return res;
} //求第k位的循环节
static BigInteger get(BigInteger a, BigInteger b, BigInteger mod){
BigInteger res = BigInteger.ONE;
BigInteger first = a;
while(true){
a = a.multiply(b).mod(mod);
if(a.compareTo(first) == 0)break;
res = res.add(BigInteger.ONE);
if(res.compareTo(BigInteger.valueOf(11)) == 0)return BigInteger.valueOf(-1);
}
return res;
} static public void main(String[] args){
//System.out.println(quick_pow(BigInteger.valueOf(2), BigInteger.valueOf(6), BigInteger.valueOf(100))); n = scan.nextBigInteger();
k = scan.nextInt(); BigInteger ans = BigInteger.ZERO;
BigInteger mod = BigInteger.valueOf(10);
for(int i = 0; i != k; i++, mod = mod.multiply(BigInteger.valueOf(10))){
BigInteger last = n.mod(mod);
if(ans.compareTo(BigInteger.ZERO) == 0){
ans = one[last.intValue()];
}else{
BigInteger tmp = last;
last = quick_pow(last, ans, mod).mod(mod);
ans = ans.multiply(get(tmp, last, mod));
if(ans.compareTo(BigInteger.valueOf(0)) < 0){
System.out.println(-1);
return;
}
}
} System.out.println(ans);
}
}

洛谷P1050 循环【java大数】的更多相关文章

  1. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告

    P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...

  2. 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)

    链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...

  3. [洛谷P3332][ZJOI2013]K大数查询

    题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...

  4. 洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110

    用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应 ...

  5. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

  6. Java实现 洛谷 Car的旅行路线

    输入输出样例 输入样例#1: 1 3 10 1 3 1 1 1 3 3 1 30 2 5 7 4 5 2 1 8 6 8 8 11 6 3 输出样例#1: 47.5 import java.util. ...

  7. Java实现 洛谷 P1738 洛谷的文件夹

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...

  8. Java实现洛谷 P1428 小鱼比可爱

    题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...

  9. 洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询

    题目链接 洛谷 bzoj 题解 整体二分 Code #include<bits/stdc++.h> #define LL long long #define RG register usi ...

随机推荐

  1. [转帖]LINUX下使用rinetd端口转发

    LINUX下使用rinetd端口转发 https://www.iteye.com/blog/lvinie-1167701 . 本来想自己写一下 发现没必要. 并且原作者提供了pan.baidu.com ...

  2. Spyder中代码提示功能添加

    问题描述:Spyder中编写python程序时,无函数智能提示.如想要输入np.reshape,无reshape提示 预期目标:输入 np.  然后智能提示reshape 解决方法: 第一步:进入本地 ...

  3. Python--拦截接口

  4. golang之文件结尾错误(EOF)

    函数经常会返回多种错误,这对终端用户来说可能会很有趣,但对程序而言,这使得情况变得复杂.很多时候,程序必须根据错误类型,作出不同的响应.让我们考虑这样一个例子:从文件中读取n个字节.如果n等于文件的长 ...

  5. 14 IF函数

    情景 某销售表,如果员工的销售额大于5000元,提成为10%,否则为8% IF函数 =IF(表达式,值1,值2) 判断表达式,如果表达式为真,显示值1,如果表达式为假,显示值2 示例

  6. 【HC89S003F4开发板】 1环境搭建

    HC89S003F4开发板环境搭建 一.概述 芯圣电子做活动,一个开发板只用一块钱,买过来玩玩.︿( ̄︶ ̄)︿ 全套资料可以在论坛或qq群里下载.总之先安装个环境先. 二.安装Keil C51 作为增 ...

  7. Vue基础语法(样式绑定,事件处理,表单,Vue组件)

    样式绑定 事件处理 表单 Vue组件 样式绑定 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  8. Aop 打印参数日志时,出现参数序列化异常。It is illegal to call this method if the current request is not in asynchron

    错误信息: nested exception is java.lang.IllegalStateException: It is illegal to call this method if the ...

  9. Windows下编译 Hadoop

    Windows下编译 Hadoop-2.9.2 系统环境 系统: Windows 10 10.0_x64 maven: Apache Maven 3.6.0 jdk: jdk_1.8.0_201 Pr ...

  10. FreeRTOS 移植

    添加FreeRTOS源码到工程中 在工程源码中创建FreeRTOS目录存放拷贝的文件 拷贝FreeRTOS->Source中的文件 可将其他不需要的文件夹全部删掉,只留3个 拷贝Demo中Fre ...