题意

给定一个进制分数 求是否是循环小数,且求出循环节长度

题解

暴力

il int find(int p){
int head=last[p%mod];
while(head&&pr[head].p!=p)head=pr[head].next;
if(!head)head=++siz;
return head;
} int main(){
T=gi;
while(T--){siz=0;memset(last,0,sizeof(last));
ll p,q,k;
p=gi;q=gi;k=gi;
ll d=gcd(p,q);
p/=d;q/=d;
p%=q;
for(int i=1;;i++){
p*=k;
if(!(p%q)){
printf("%d 0\n",i);
break;
}
int t=find(p);
if(!pr[t].id)pr[t]=(data){i,p};
else{
printf("%d %d\n",pr[t].id-1,i-pr[t].id);
break;
}
p%=q;
}
}
return 0;
}

正解:

首先设一个序列,表示原数小数点后i位,那么

然后余数

上面暴力是计算到这样一对的时候停止

 

那么考虑a的性质 如果 ,那么

如果 那么

就是出现了更早的重复,所以最早的重复肯定是在p=1,说明这样形式的只有纯循环小数

如果满足

于是

然后就是求一个K模B的阶的问题。

阶很好求。。

如果

那么设

重复这个过程,然后直到时,做了多少次,前面非循环部分长度就是t,求一遍阶就可以了

#include<queue>
#include<map>
#include<cstdio>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int>Pii;
const int inf=0x7fffffff;
const ll infll=(1ll<<60);
#define dbg(n) cerr<<#n"="<<n<<endl;
#define Ri register int
#define gc getchar()
#define il inline
il ll read(){
bool f=true;
register ll x=0;char ch;
while(!isdigit(ch=gc))
if(ch=='-')f=false;
while(isdigit(ch)){
x=(x<<1)+(x<<3)+ch-'0';
ch=gc;
}
return f?x:-x;
}
#define X first
#define Y second
#define gi read()
#define FO(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
inline ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
map<ll,int> Calc(ll x){
map<ll,int> prime;
for(int i=2;(ll)i*i<=x;i++)
if(x%i==0){
int sum=0;
while(x%i==0)x/=i,sum++;
prime[i]=sum;
}
if(x>1)prime[x]=1;
return prime;
}
il ll Euler_phi(ll x,const map<ll,int>& prime){
ll ans=x;
for(map<ll,int>::const_iterator i=prime.begin();i!=prime.end();i++)
if(i->Y)ans=ans/i->X*(i->X-1);
return ans;
}
il ll Mul(ll a,ll b,ll mod){
ll ans=0,p=a%mod;
while(b){
if(b&1)ans=(ans+p)%mod;
p=(p+p)%mod;
b>>=1;
}
return ans;
}
il ll Mod(ll a,ll b,ll mod){
ll ans=1,p=a%mod;
while(b){
if(b&1)ans=Mul(ans,p,mod);
p=Mul(p,p,mod);
b>>=1;
}
return ans;
}
ll A,B,K;
int main(){
int T;
cin>>T;
while(T--){
A=gi;B=gi;K=gi;
ll d=gcd(A,B);
A/=d;B/=d;
map<ll,int> prime_B=Calc(B),prime_K=Calc(K);
int M=0;ll tmpB=B;
for(map<ll,int>::const_iterator i=prime_K.begin();i!=prime_K.end();i++){
int p=prime_B[i->X];prime_B[i->X]=0;
M=max(M,(p+i->Y-1)/i->Y);
while(p)
tmpB/=i->X,p--;
}
ll R=0;
if(tmpB!=1){
ll phi_B=Euler_phi(tmpB,prime_B);
R=phi_B;
prime_B=Calc(R);
for(map<ll,int>::const_iterator i=prime_B.begin();i!=prime_B.end();i++){
int p=i->Y;
while(p){
if(Mod(K,R/i->X,tmpB)==1)
p--,R/=i->X;
else break;
}
}
}
cout<<M<<" "<<R<<endl;
}
return 0;
}

[bzoj 3031] 理科男的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. XMPP——Smack[6]离线消息和离线文件的实现

    终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...

  3. 设计师Yoyo:为用户设计产品,让他们生活更美好

    Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...

  4. 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”

    一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...

  5. 【Diary】

    [写日记是好习惯] 前记 很随意的日记.想什么写什么,没有限制. 希望以后看到曾经,努力的自己比摸鱼的自己多. 2019.3 2019.3.29 第24次请假打卡 xzh:那些理科男以后都会当IT工作 ...

  6. this应用详解-js原生

    学习记录,以防遗忘,适合新手解惑.老鸟避让! 在微信H5的开发中,很多页面都是简单的一个模型item在加上很多很多数据组成起来的.例如微信朋友圈,仔细观察,他的一个基本模型就是 “头像图片 + 用户昵 ...

  7. 关于python,完善我计算机知识的一步。

    因为身为理科男,所以特别喜欢涉及其他领域的知识.而对我来说,计算机是很有诱惑力的--尤其是程序语言设计,懂得一门“外语”是多么的重要.大一时候接触过包括有计算机的基本知识,c语言,这个新的学期也开始接 ...

  8. [2017BUAA软工]第零次博客作业

    第一部分:结缘计算机 1. 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 当年高考前在专业这件事上纠结了好久,因为我对于大学各个专业具体学什么都不甚了解,于是就迟迟没有明确的目 ...

  9. 36Kr众筹项目比呀比biyabi,调查分析研究报告,背后资方势力的关系梳理

    36Kr众筹项目比呀比biyabi调查报告 个层次的评价.   变革家-比呀比拆解报告:http://biangejia.com/archives/12653 8.其它 没有通过微信,参加路演,有点遗 ...

随机推荐

  1. MSSQL数据库逻辑文件名修改与查看

    逻辑文件名是什么 你用的程序连接的时候使用的是数据库名,然后你在你的数据库右击属性的时候,左上角单击"文件",可以看到,数据库名和逻辑文件名是不一样的,你可以看自己的数据库的路径下 ...

  2. 集合类学习之ArrayList源码解析

    1.概述 ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大 ...

  3. js 日期函数用法总结

    1 创建Date对象,用于处理日期和时间 var date=new Date(); Date对象会把当前日期和时间保存为初始值. 还可以设置其它参数初始化 Date对象: new Date(" ...

  4. 在浏览器中打开本地应用(iOS)

    在浏览器中点击跳转到本地应用的方法(如果本地没有安装的话) 然后在浏览器中输入tianxiang://就能打开这个应用了 ................省略 遇到一个12年还是初中的小朋友,

  5. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于DTcms)

    首先安装EPPlus 包

  6. 3DES 加解密,对长度不限制

    #region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...

  7. JavaScript知识思维导图

    知识点:(图片为网络转载,谢谢分享.) JavaScript 变量 JavaScript 数据类型 JavaScript 字符串函数 Javascript 运算符 JavaScript 流程控制 Ja ...

  8. QQ截图工具提取

    今晚关了QQ,突然想截个图,但是呢又不想打开QQ了,于是在网上搜索截图工具,下载了几个,感觉都没有QQ截图好用.索性直接百度QQ截图工具提取,看到有些网站上有提取的,里面的文件有点多,不是我中意的,突 ...

  9. 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署

    部署流程概述 在微软的iis服务器上部署基于ArcGIS  Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...

  10. C#调用C、C++结构体数组的方法总结

    一个客户要使用C#调用我们用C++开发的一个动态链接库,本来我没有C#的开发经验,就随便写了一个例程.以为很简单就可以搞定,没想到客户开发的过程中遇到了不少问题,最困难的就是用C#调用C++接口中的自 ...