洛谷P1050 循环【java大数】
题目: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大数】的更多相关文章
- 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...
- 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)
链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...
- [洛谷P3332][ZJOI2013]K大数查询
题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...
- 洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110
用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应 ...
- 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化
Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...
- 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. ...
- Java实现 洛谷 P1738 洛谷的文件夹
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...
- Java实现洛谷 P1428 小鱼比可爱
题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...
- 洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询
题目链接 洛谷 bzoj 题解 整体二分 Code #include<bits/stdc++.h> #define LL long long #define RG register usi ...
随机推荐
- 《ucore lab4》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 练习1:分配并初始化一个进程控制块 题目 alloc_proc函数(位于kern/process/proc.c中) 负责分配并返回一个新的str ...
- vue之$event获取当前元素的节点
<p @click = “clickfun($event)”>点击</p> methods: { clickfun(e) { // e.target 是你当前点击的元素 // ...
- [转帖]Linux系统进程的知识总结,进程与线程之间的纠葛...
Linux系统进程的知识总结,进程与线程之间的纠葛... https://cloud.tencent.com/developer/article/1500509 当一个程序开始执行后,在开始执行到执行 ...
- Python3之字符串格式化format函数详解(上)
概述 在Python3中,字符串格式化操作通过format()方法或者f’string’实现.而相比于老版的字符串格式化方式,format()方法拥有更多的功能,操作起来更加方便,可读性也更强.该函数 ...
- 对比JPA 和Hibernate 和 Mybatis的区别
1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...
- Python类和实例调用
self指向的是实例对象,作为第一个参数,使用时不需要传入此参数. class Student(object): #定义一个Student类, def __init__(self, name, sco ...
- nmap使用帮助翻译
Nmap 7.60 ( https://nmap.org )Usage: nmap [扫描类型] [操作] {目标说明}目标说明: 可以识别主机名.IP地址.网络,等等. 例如: scanme.n ...
- io.ByteIO和open操作二进制流的区别(转)
转自Stack Overflow:https://stackoverflow.com/questions/42800250/difference-between-open-and-io-bytesio ...
- springboot2.x配置druid sql监控
后端接口响应慢,通常我们就需要优化代码和sql,如果项目中使用druid连接池,那么我们可以利用其提供的sql监控功能,来帮助我们快速定位慢sql已经sql执行次数等问题,springboot2之后, ...
- Verilog HDL
https://wenku.baidu.com/view/9943b7acf524ccbff1218463.html https://hdlbits.01xz.net/wiki/Main_Page h ...