题意

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

题解

暴力

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. iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/

    http://zanderzhang.gitcafe.io/2015/09/19/iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/ 百度外卖选择送货地址: 饿了么选择送货地 ...

  2. 【学习笔记】【C语言】scanf函数

    1. 简介 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设 ...

  3. 【转载】#274 - Can't Overload if Methods Differ Only by ref and out Modifiers

    You can overload a method in a class, i.e. define two methods with the same name, if the methods hav ...

  4. CSS制作彩虹效果

    今天看到一篇文章,说到margin的塌陷的问题,并提供了好几个例子. 自己之前还没怎么遇到过这个问题,正好来研究一下. <div class="box1"></d ...

  5. .NET清除Session 的几个方法[clear/removeAll/remove/Abandon]

    1.clear() 清空所有session对象的值,但保留会话   2.removeAll() 调用clear()方法   3.remove("SessionName") 删除某个 ...

  6. DB2&&oracle-培训内容

    DB2 1 Data Sharing架构,高可用 2 DB2的对象主要有以下几类:database,storage group, Tablspace, indexspace, table,index ...

  7. 使用struct实现面向对象编程的封装

    虽然C是面向过程的语言,但是这不代表C不能使用面向对象的思想,本质上说语言只是一种手段而已,一种外在的表现形式,支持面向对象的语言只是通过设计的特定的关键字更好的表现了面向对象编程而已.C中也可以使用 ...

  8. java 设计模式之单例模式

    -------Success is getting what you want, happiness is wanting what you get. java设计模式之单例模式(Singleton) ...

  9. U-Boot--配置过程分析

    arm核:arm920t    2410 uboot版本:u-boot1.1.6 通过readme可以知道配置执行make smdk2410_config命令. 顶层Makefile : smdk24 ...

  10. 如何去掉html中的超链接

    $a= preg_replace("/<a[^>]+>/", "", $a); $a= preg_replace("/<\/a ...