Period of an Infinite Binary Expansion 题解
Solution
简单写一下思考过程,比较水的数论题
第一个答案几乎已经是可以背下来的,在此不再赘述
考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \perp 2)\),要求的是循环长度
首先看看样例的\(\frac{1}{5}\)怎么做呢
观察答案,可以得到$$\frac{1}{5}=\sum_{t>0}(\frac{3}{16^t})$$
简单思考一下,发现答案和\(p\)没关系,和\(q\)的关系为
\]
其中\(s,t \in \text{N}^\ast\)
简单化下式子,等比数列求和得$$2^k-1=qS$$
即$$2^k \equiv 1 \pmod{q}$$
所以\(k|\varphi(q)\)
秒杀!
Code
#include <cstdio>
#include <iostream>
typedef long long LL;
using namespace std;
inline LL gcd(LL x, LL y) {return (y == 0) ? x : gcd(y, x % y);}
LL p, q, ans1, ans2, d, n, i, id, phi;
inline long long mul(long long a,long long b,long long c){
long long res = (a*b-(long long)((long double)a/c*b)*c)%c;
return res < 0 ? res+c : res;
}
inline LL fpow(LL pnt) {
LL res = 1, base = 2;
for(; pnt; pnt >>= 1, base = mul(base, base, q))
if(pnt & 1) res = mul(res, base, q);
return res;
}
inline void getphi(LL x) {
phi = x;
for(i = 2; i * i <= x; ++i) {
if(!(x % i)) {
phi = phi / i * (i - 1);
while(!(x % i)) x /= i;
}
}
if(x ^ 1) phi = phi / x * (x - 1);
}
int main() {
while(~scanf("%lld/%lld",&p,&q)) {
++id;
d = gcd(p, q);
p /= d, q /= d;
ans1 = 1; while(!(q & 1)) ++ans1, q >>= 1;
if(q == 1) ans2 = 0;
else {
getphi(q);
ans2 = 0x7f7f7f7f;
for(i = 1; i * i <= phi; ++i)
if(!(phi % i)) {
if(fpow(i) == 1) {ans2 = i; break;}
if(fpow(phi / i) == 1) ans2 = phi / i;
}
}
printf("Case #%lld: %lld,%lld\n",id,ans1,ans2);
}
return 0;
}
Period of an Infinite Binary Expansion 题解的更多相关文章
- poj3358 Period of an Infinite Binary Expansion
Period of an Infinite Binary Expansion 题目大意:给你一个分数,求这个分数二进制表示下从第几位开始循环,并求出最小循环节长度. 注释:int范围内. 想法:这题说 ...
- poj 3358 Period of an Infinite Binary Expansion
由乘2取整得到分数的小数位,可以找到规律!!! 例如:1/10,2/10,4/10,8/10,16/10,32/10,64/10…… 取整后:1/10,2/10,4/10,8/10,6/10,2/10 ...
- poj 2462 Period of an Infinite Binary Expansion
欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Eule ...
- poj3358 Period of an Infinite Binary Expansion 数论有难度
这道题目感觉好难,根本就是无从下手的感觉,尝试了以前的所有方法,都没有思路,毫无进展,参考了一下别人的思路,感觉学到了新的知识 接下来开始分析 观察1/10这组数据,按照二进制转化法可以得到: 1/1 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- CF949E Binary Cards 题解
题面 首先发现:一个数最多会出现1次: 然后深入推出:一个数不会既用它又用它的相反数: 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位 ...
- 【CF1436C】Binary Search 题解
原题链接 题意简介 要求有多少种 n 的排列,能够通过二分法正确地找到放在 pos 处的数字 x. 答案对 1e9+7 取模.n<=1000. 采用的二分法如下图: 思路分析 首先,这个排列中有 ...
- Codeforces #698 (Div. 2) E. Nezzar and Binary String 题解
中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\ ...
- acm数学(转)
这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...
随机推荐
- 筛 sigma_k
问题 定义 \(\sigma_k(n)\) 表示 \(n\) 的所有约数的 \(k\) 次方和,即 \[\sigma_k(n)=\sum_{d\mid n}d^k \] 问题:求 \(\sigma_k ...
- 调和级数为什么是 O(logn) 的
目录 调和级数 正片 调和级数 调和级数(Harmonic series)定义为 \[H(n)=\sum_{i=1}^n\dfrac 1i \] \(H\) 发散,证明看百度 . 正片 首先我们把 \ ...
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- Python logging日志管理
import logging logger = logging.getLogger("simple_example") logger.setLevel(logging.DEBUG) ...
- Luogu1816 忠诚 (ST表)
继续复习模板,加深理解ing... #include <iostream> #include <cstdio> #include <cstring> #includ ...
- kubernetes网络模型
Overview 本文将探讨Kubernetes中的网络模型,以及对各种网络模型进行分析. Underlay Network Model 什么是Underlay Network 底层网络 Underl ...
- 第九十篇:Vue 具名插槽
好家伙 1.什么是具名插槽? 来简单理解一下, 具有自己名字的插槽,就是具名插槽 我们来尝试使用一下具名插槽: 在Article.vue组件中: <template> <div cl ...
- Linux之firewalld防火墙规则
一, 什么是防火墙规则? 允许哪些服务端口被放行,怎么放行,及哪些服务端口被阻拦,如何阻拦的一组网络安全规则.支持ipv4和ipv6,且分为直接规则和富规则两种. 二, 如何管理firewalld 1 ...
- 阿里druid-spring-boot-starter 配置,个人整理以及遇到的问题(防止之后找不到)
简介,什么是Druid Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器组成.该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向 ...
- KingbaseES 数据库软件卸载
关键字: KingbaseES.卸载 一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程序菜单中是否安 ...