[bzoj 3031] 理科男
题意
给定一个进制分数
求是否是循环小数,且求出循环节长度
题解
暴力
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] 理科男的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- XMPP——Smack[6]离线消息和离线文件的实现
终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...
- 设计师Yoyo:为用户设计产品,让他们生活更美好
Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...
- 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”
一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...
- 【Diary】
[写日记是好习惯] 前记 很随意的日记.想什么写什么,没有限制. 希望以后看到曾经,努力的自己比摸鱼的自己多. 2019.3 2019.3.29 第24次请假打卡 xzh:那些理科男以后都会当IT工作 ...
- this应用详解-js原生
学习记录,以防遗忘,适合新手解惑.老鸟避让! 在微信H5的开发中,很多页面都是简单的一个模型item在加上很多很多数据组成起来的.例如微信朋友圈,仔细观察,他的一个基本模型就是 “头像图片 + 用户昵 ...
- 关于python,完善我计算机知识的一步。
因为身为理科男,所以特别喜欢涉及其他领域的知识.而对我来说,计算机是很有诱惑力的--尤其是程序语言设计,懂得一门“外语”是多么的重要.大一时候接触过包括有计算机的基本知识,c语言,这个新的学期也开始接 ...
- [2017BUAA软工]第零次博客作业
第一部分:结缘计算机 1. 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 当年高考前在专业这件事上纠结了好久,因为我对于大学各个专业具体学什么都不甚了解,于是就迟迟没有明确的目 ...
- 36Kr众筹项目比呀比biyabi,调查分析研究报告,背后资方势力的关系梳理
36Kr众筹项目比呀比biyabi调查报告 个层次的评价. 变革家-比呀比拆解报告:http://biangejia.com/archives/12653 8.其它 没有通过微信,参加路演,有点遗 ...
随机推荐
- javascript中ajax post实例详解
一,原生态的XMLHttpRequest 代码如下 复制代码 <script language="javascript"> function savei ...
- Linux下动态共享库加载及使用详解【转】
原文地址:http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while l ...
- mysql之触发器before和after的区别(2)
我们先做个测试: 接上篇日志建的商品表g和订单表o和触发器 假设:假设商品表有商品1,数量是10: 我们往订单表插入一条记录: insert into o(gid,much) values(1,20) ...
- db.properties 数据库配置文件
project.pool.initialPoolSize project.pool.minPoolSize project.pool.maxPoolSize project.db.tablePrefi ...
- Template_16_模板与继承
1,名称模板参数template <typename PolicySetter1 = DefaultPolicy1, typename PolicySetter2 = DefaultPol ...
- c++11之右值引用
本文大部分来自这里,并不是完全着行翻译,如有不明白的地方请参考原文. 在c++中,创建临时对象的开销对程序的影响一直很大,比如以下这个例子: String getName(){ return “Kia ...
- Regionals 2013 :: North America - Southeast USA
Regionals 2013 :: North America - Southeast USA It Takes a Village As a Sociologist, you are studyin ...
- 转载:Android Studio 快捷键
Android Studio使用技巧系列教程(一) 分类: android studio2015-07-08 10:04 4774人阅读 评论(6) 收藏 举报 android开发ideandroid ...
- 而在Jquery中则使用$.map()、$.each()来操作数组
首先是普通的数组(索引为整数的数组): //$.map(arr,fn); //对数组中的每个元素调用fn函数逐个进行处理,fn函数将处理返回最后得到的一个新的数组 var arr = [9, 8, 7 ...
- 重拾C,一天一点点_5
switch(表达式){ case 整型常量表达式:语句序列 case 整型常量表达式:语句序列 default:语句序列} while(表达式) 语句 for(表达式1; 表 ...