[51nod1035]最长的循环节
题意:输出<=n的数中倒数循环节长度最长的那个数
解题关键:http://w3.math.sinica.edu.tw/math_media/d253/25311.pdf
https://wenku.baidu.com/view/bf86107f11661ed9ad51f01dc281e53a580251a0.html
论文题,1/x的循环节长度 可转化为 已知整数n,求最小的k使10^k ≡1 (mod n),k<=x。
然后暴力即可。
循环节的长度确实与分子完全无关,只要分数的分母不变,循环节的长度就不会变。
注意:
1、分数必须为既约真分数。
2、把x中的2和5的因式全部去掉,这样不影响循环节长度,剩下的因式记为n1。
3、根据循环小数化为分数的方法,分母必然是99…9(k个9)=10^k-1,并且n1必然整除10^k-1,这样问题就转化为求满足10^k≡1 (mod n1)的最小正整数k。
4、循环小数化为分数的方法:
1/9=0.11111111111111111111…….对吧
假设有一个循环小数0.345634563456………
其中循环的是3456,从1/9怎样可以过度到0.3456…(3456循环)呢.我们可以把0.3456….(3456循环)看作是0.1…(1循环)中每四个1为一组的1111变成了3456,因此只需要给0.1..(1循环)乘以3456/1111就可以了.即1/9×3456/1111
同理可以得出如下规律:
0.259……(259循环)就可以写成1/9×259/111
0.123456……(123456循环)就可以写成1/9×123456/111111
0.205802713……(205802713循环)就可以写成1/9×205802713/111111111
以此类推这公式不言而喻了
0.a…b(a…b循环)=1/9×a…b/1…1=a…b/9…9
(说明:a…b代表一串数字,9…9的位数与a…b的位数相同)
如果碰上了这样的循环小数:
0.3456142857…(142857循环)怎么办呢,这里3456是不循环的
我们进行假设,如果知道了0.00001…(1循环)的分数是什么的话直接给他乘以142857/111111在加上不循环的0.3456即3456/10000的话就可以得出结果了
那么0.00001…(1循环)是多少呢
很显然0.1…(1循环)减去0.1111就是我们要的结果,也就是1/9-1111/10000
那么最后结果就是:
(1/9-1111/10000)×142857/111111+3456/10000
(1×10000-1111×9)/(9×10000)×(142857/111111)+3456/10000
(1/90000)×(142857/111111)+3456/10000
142857/(90000×111111)+3456/10000
(142857+3456×9×111111)/(90000×111111)
(142857+3456×999999)/(90000×111111)
(142857+3456×(1000000-1))/(90000×111111)
(142857+3456×1000000-3456)/(90000×111111)
(3456142857-3456)/9999990000
以此类推这公式也不言而喻了
设循环小数
0.c…da……b(a……b循环)
说明:c…d与a……b代表各自一串数字,a……b为循环部分,c…d为不循环部分,为了区别循环部分与不循环部分的位数,分别以……代表同a……b循环部分相同的数位,以…代表同c…d不循环部分相同的数位,
0.1(1循环)减去0.1…1就是0.0…01(1循环)
0.c…da……b(a……b循环)化分数的结果就是
(1/9-1…1/10…0)×a……b/1……1+c…d/10…0
然后来化简
(1×10…0-1…1×9)/(9×10…0)×(a……b/1……1)+c…d/10…0
(1/90…0)×(a……b/1……1)+c…d/10…0
a……b/(90…0×1……1)+c…d/10…0
(a……b+c…d×9×1……1)/(90…0×1……1)
(a……b+c…d×9……9)/(90…0×1……1)
(a……b+c…d×(10……0-1))/(90…0×1……1)
(a……b+c…d×10……0-c…d)/(90…0×1……1)
(c…da……b-c…d)/9……90…0
0.c…da……b(a……b循环)化分数的结果就是
(c…da……b-c…d)/9……90…0,其中……代表同a……b循环部分相同的数位,以…代表同c…d不循环部分相同的数位
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
//sqrt(n)求欧拉函数值
ll euler_phi(int n){
int res=n;
for(int i=;i*i<=n;i++){
if(n%i==){
res=res/i*(i-);
while(n%i==) n/=i;
}
}
if(n!=) res=res/n*(n-);
return res;
} ll mod_pow(ll x,ll n,ll p){
ll res=;
while(n){
if(n&) res=res*x%p;
x=x*x%p;
n>>=;
}
return res;
} int main(){
int n;
cin>>n;
ll ans=,tmp=,res=;
for(ll i=;i<=n;i++){
ll t=euler_phi((int)i);
tmp=;
for(int j=;j<=t;j++){
if(t%j==){
if(mod_pow(,j,i)==){
tmp=j;
break;
}
}
}
if(tmp>ans){
ans=tmp;
res=i;
}
}
cout<<res<<"\n";
return ;
}
[51nod1035]最长的循环节的更多相关文章
- 51Node 1035----最长的循环节
51Node 1035----最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数. 1/6= 0.1 ...
- 51nod 1035:最长的循环节
1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求< ...
- 51nod 1035 最长的循环节
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数. 1/6= 0.1( ...
- HDU 3746 Cyclic Nacklace 环形项链(KMP,循环节)
题意: 给一个字符串,问:要补多少个字符才能让其出现循环?出现循环是指循环节与字符串长度不相等.比如abc要补多个变成abcabc.若已经循环,输出0. 思路: 根据最小循环节的公式,当len%(le ...
- KMP求字符串最小循环节
证明1: 对于一个字符串S,长度为L,如果由长度为len的字符串s(字符串s的最小循环节是其本身)循环k次构成,那么字符串s就是字符串S的最小循环节 那么字符串有个很重要的性质和KMP挂钩,即 i ...
- BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 792 Solved: 535 ...
- poj 2406 Power Strings(kmp循环节)
题目链接:http://poj.org/problem?id=2406 题目大意:如果n%(n-next[n])==0,则存在重复连续子串,长度为n-next[n]. 例如: a b ...
- 循环节(BFS)
循环节 时间限制: 1 Sec 内存限制: 64 MB提交: 56 解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写 ...
- Colossal Fibonacci Numbers! UVA 11582 寻找循环节
/** 题目:Colossal Fibonacci Numbers! UVA 11582 链接:https://vjudge.net/problem/UVA-11582 题意:f[0] = 1, f[ ...
随机推荐
- 【BZOJ4569】[Scoi2016]萌萌哒 倍增+并查集
[BZOJ4569][Scoi2016]萌萌哒 Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四 ...
- power law 幂定律
y=cx∧a 卖品销量排名与销量
- 我的Android进阶之旅------>自己写个Activity来调节Android系统背光亮度Brightness
今天终于算初步写好了一个调节系统背光亮度Brightness的代码,本来不看Android源代码以为可以直接调用某个Action来启动系统的那个调节Brightness的对话框,但是看了代码后发现系统 ...
- linux c编程:进程间通信
进程间的通信包括管道,共享内存,信号量通信,消息队列,套借口(socket)和全双工管道通信 首先来看下管道的用法:管道顾名思义,就如同下水道管道一样,当从管道一端流水到另一端的时候,水流的方向是单方 ...
- 利用Linux中的计划任务+PHP网页程序(转)
利用Linux中的计划任务+PHP网页程序,实现对web服务器运行状况的监测[每5分钟监测一次,并邮件提醒]一.我的监测服务器环境:rhel5.5+apache2.2+php5二.功能描述:写一个PH ...
- 剑指Offer:删除链表的节点【18】
剑指Offer:删除链表的节点[18] 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3-& ...
- delphi XE7 HttpEncode 编码问题
近期在做网址编码相关的工作,发现在用 XE5 编译的时候,一切正常,拿 到 XE7下 就 结果错误了.百度了下,谷歌 了下,有人提出,但是,我没有找到答案,也许都没有碰到这个问题,也许都己经自己默默的 ...
- python二叉树的遍历,递归和非递归及相关其它
# encoding=utf-8class node(object): def __init__(self,data,left=None,right=None): self.data = data s ...
- frp支持httpIP地址加端口号访问
(一)安装就不再多说 传送门:https://blog.csdn.net/superljn/article/details/81289993 (二)vim frps.ini [common] bind ...
- FAQrobot 聊天机器人笔记
follow: https://github.com/ofooo/FAQrobot 这是一个简单的基于问词匹配的自动问答,获取与用户问句Q1最匹配的知识库中的问句Q2,Q2的答案就是Q1的答案. 首 ...