[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的阶的问题。

阶很好求。。

#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;
}

时间: 2024-08-09 19:28:38

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

创业吧,兄弟--记者眼中的中关村创业大街创业热潮纪实

本文是山东省党报<大众网>记者采访北京中关村创业大街的报道.文章最后写的超级表格创始人就是我.那次记者杨学莹跟我现在binggo咖啡聊,后来咖啡店要关门,我们就转移到车库咖啡继续聊到凌晨. 原文发布在大众网,网址是:http://paper.dzwww.com/dzrbnew/dzrb/content/20150207/Articel05002MT.htm 但手机浏览页面未自适应,看下面即可. 正文: 2月3日上午,创业者在3W咖啡谈事儿. 2月5日的创业大街街头,海报.招牌充满创业气息. 2

图解ARP协议(三)ARP防御篇-如何揪出&quot;内鬼&quot;并&quot;优雅的还手&quot;

一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低,普通人只要拿到攻击软件就可以扰乱网络秩序,导致现在的公共网络.家庭网络.校园网.企业内网等变得脆弱无比. 所以,如何进行有效的ARP防御?作为普通用户怎么防御?作为网络/安全管理员又怎么防御?有哪些ARP防御软件?如果被ARP攻击了,如何揪出"内鬼",并"优雅的还手"?

团队开发项目之典型用户和用户场景

一.典型用户 姓名 田心 性别 男 年龄 22 职业 在校学生 收入 无收入,月消费1000 知识层次和能力 大学生:计算机专业,热爱编程:经常开关.查看手机 生活/工作情况 典型理科男,近期失恋 动机.目的.困难 动机:没事就拿出手机看看,电源键已松动,有些反应不及时:想要尝试新鲜锁屏软件 目的:希望有新的软件可以不用按电源键就能解锁,最好还有更安全的密保措施 困难:一般的锁屏软件都要电源键,而不用电源键的功能不全,不好用 用户偏好 编程,编程,编程 用户比例 ? 典型场景 通过动作就能解锁,

软件工程_东师站_总结

一.团队成员介绍 团队名称: 耐撕(Nice) 团队队长: 蕊哥:http://www.cnblogs.com/zhengrui0452/ 团队其他队员: ????亮哥:http://www.cnblogs.com/dendroaspis-polylepis/(超强的代码控制能力者,团队项目核心程序员) ????成林大腿:http://www.cnblogs.com/charliePU/ (服务器端主要控制者,站立会议主要记录者,fork其它团队项目后,团队项目核心程序员) ????张呆呆:ht

【第4组】Touch组需求分析总文档 V7.0 2017/7/13

头脑风暴结果: 思路1:照片分类管理,制作成回忆录.回忆簿(3D街景回忆录.针对城市旅游回忆方面) 该软件的最主要功能为照片信息的提取并据此(一连串的时间.相近的地点)制作出相关照片的回忆录,尤其针对城市旅游回忆,可以通过3D街景技术再现过去美好的旅游回忆,触碰(touch)每个人心中最甜蜜的旅游记忆,带来美的精神享受! 该软件同时还应具有照片分类及基本照片查看功能,即按时间.地点分类和具体每一张照片的查看. 该软件可扩展面广,今后可以不止为旅游照片整理回忆,可以为各种各样的照片整理为回忆,例如

舞步学院PUA就是个坑,大家千万不要信

报过一次舞步学院的私教课程. 当时也是追一个喜欢的妹子,表白被拒了. 上网搜追女生方法的时候,搜到的舞步学院.看了一下网上的介绍,还有特么的实战案例分析,顿时感觉开启了新天地. 然后就买了他们的理论课程. 不要喷!本人理科男,当时真的就是觉得跟高考一样.买套理论教材自己看,找导师给画个重点,在看看实战解析,最多有不懂的地方,再问问导师就行. 几百块一套,几个G的大文档,下了老子三天. 下片都没有这么用心过. 然后看了有半个月吧. 资料并不多,断断续续的看,毕竟白天还要上班,只能晚上看.而且给的资

又是一年自考时

    轰轰烈烈的自考周过去了,骑着小电车驰骋在爱民道,新华路.....廊坊的大街小巷上,为了一个目标-我的自考.耗时两天三科的自考结束了,回头想想,在路上,在考场,还是中午"露宿街头",无疑为我们的自考增添一丝丝回忆的元素.     年年岁岁花相似,岁岁年年人不同.考场上30人,都是我们提高班的兄弟姐妹,说是面向全省的自考,仿佛就在"主场作战",这样也好,底气硬了,成绩自然好了.话说,人不同,今年没有了"大兵",花相似,还是在廊坊的个个高校,而

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

Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章,耐心读下来,你将受益匪浅. 作者:Yoyo,整理自设计师Yoyo的订阅号:Designer_Yoyo  整理:it3q.com(程序猿訪谈录站点) Yoyo的知乎:http://www.zhihu.com/people/youwenwen Yoyo的工作经历: 华为 · 设计总监,领域体验官 腾讯

程序员相爱相杀鄙视指南

有人的地方就有江湖.在互联网技术世界里,身为中流砥柱的程序员们,看似每天都坐在屏幕前,两耳不闻公司事,一心苦练编程功.殊不知,在“技术至上”的程序世界,早已暗波汹涌,一条条相爱相杀的鄙视链盘根错节,江湖的争斗久久未分出胜负…… 相信吃瓜群众都知道,编程语言是程序员的立身之本,然而,很少有人知道,不同的编程语言出自各派.功能不一,它更代表了程序员在江湖上的地位高低. 程序语言太复杂,一旦选不好,就会落入鄙视链的底层! 最心疼的还是PHP工程师,明明人家也是为公司奉献很多的,却遭到全体的鄙视. 如果