zoj 3609

来源:互联网 发布:合并报表知乎 编辑:程序博客网 时间:2024/06/14 16:37

比赛的时候卡在这里,都是我没有把题目看懂,m=1的情况没考虑好,直接当不存在处理了==

下面给一种暴力法

不过时间也是很快的


#include<iostream>#include<cstdio>using namespace std;int t;int main(){int t,a,m,aa,ans,mm,i;scanf("%d",&t);while(t--){scanf("%d%d",&a,&m);if(m==1||a==1){printf("1\n");continue;}if(a%m==0||m%a==0){printf("Not Exist\n");continue;}for(i=1;i<m;i++){if(a*i%m==1){break;}}if(i==m){printf("Not Exist\n");}else{printf("%d\n",i);}}return 0;}

下面是我比赛时想的,因为m=1考虑出错,结果很悲剧

#include<iostream>#include<cstdio>using namespace std;int run(int a,int b){if(a<b){a^=b;b^=a;a^=b;}if(b==0) return a;return run(b,a%b);}int t;int main(){int t,a,m,aa,ans,mm;scanf("%d",&t);while(t--){scanf("%d%d",&a,&m);if(m==1||a==1){printf("1\n");continue;}if(a%m==0||m%a==0){printf("Not Exist\n");continue;}if(run(a,m)==1){if(a>m){aa=a;while(aa%m!=1){aa+=a;}ans=aa/a;}else{mm=m;while((mm+1)%a!=0){mm+=m;}ans=(mm+1)/a;}printf("%d\n",ans);}else{printf("Not Exist\n");}}return 0;}


原创粉丝点击