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\)的关系为

\[\frac{1}{q}=\sum_{t>0}{\frac{s}{2^{kt}}}
\]

其中\(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 题解的更多相关文章

  1. poj3358 Period of an Infinite Binary Expansion

    Period of an Infinite Binary Expansion 题目大意:给你一个分数,求这个分数二进制表示下从第几位开始循环,并求出最小循环节长度. 注释:int范围内. 想法:这题说 ...

  2. 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 ...

  3. poj 2462 Period of an Infinite Binary Expansion

    欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Eule ...

  4. poj3358 Period of an Infinite Binary Expansion 数论有难度

    这道题目感觉好难,根本就是无从下手的感觉,尝试了以前的所有方法,都没有思路,毫无进展,参考了一下别人的思路,感觉学到了新的知识 接下来开始分析 观察1/10这组数据,按照二进制转化法可以得到: 1/1 ...

  5. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  6. CF949E Binary Cards 题解

    题面 首先发现:一个数最多会出现1次: 然后深入推出:一个数不会既用它又用它的相反数: 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位 ...

  7. 【CF1436C】Binary Search 题解

    原题链接 题意简介 要求有多少种 n 的排列,能够通过二分法正确地找到放在 pos 处的数字 x. 答案对 1e9+7 取模.n<=1000. 采用的二分法如下图: 思路分析 首先,这个排列中有 ...

  8. Codeforces #698 (Div. 2) E. Nezzar and Binary String 题解

    中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\ ...

  9. acm数学(转)

    这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法    这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...

随机推荐

  1. 丽泽普及2022交流赛day16 社论

    这场比较平凡吧 . 省流: http://zhengruioi.com/contest/1087 目录 目录 A. Gene 题面 题解 算法一(正解) 算法二 B. Fight 题面 题解 算法一( ...

  2. 清北学堂 2020 国庆J2考前综合强化 Day4

    目录 1. 题目 T1 写字符串 题目描述 Sol T2 神奇的数 题目描述 Sol T3 珠子染色 题目描述 Sol T4 病毒扩散 题目描述 Sol 算法 -- 图论 1. 题目 T1 写字符串 ...

  3. mysql 存储过程和触发器

    存储过程 -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名称(参数列表) BEGIN - ...

  4. 皮皮调度(1)——从Airflow到DolphinScheduler,以及“皮皮调度”的来历

    按照前一篇文章 <GraalVM -- 让Java变得再次强大> 末尾提到的计划,本来这篇文章是想写一下GraalVM的后续<深耕云原生的Java应用框架 -- Quarkus> ...

  5. Rust 从入门到精通05-数据类型

    Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型. 在 Rust 中,每一个值都属于某一个 数据类型(data type),分为两大类: ①.标 ...

  6. 大数据Hadoop入门教程 | (一)概论

    数据是什么 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质.状态以及相互关系等进行记载的物理符号或这些物理符号的组合,它是可识别的.抽象的符号. 它不仅指狭义上的数字,还可以是具有一定 ...

  7. 定语从句"介词+which/whom"的用法

    介词+which [例句]My elder sister works in the famous university. She graduated from the famous universit ...

  8. WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...

  9. Shell第三章《for循环》

    Shell循环:for 语法结构: for 变量名 [ in 取值列表 ] do 循环体 done 需求:自动创建10个用户 #!/bin/bash read -p "请输入你要创建的用户名 ...

  10. [Noi2010]能量采集 (莫比乌斯反演)

    [Noi2010]能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能 ...