题意
大家都懂的;
思路
输入m,n
answer=n/(m^(n-1));
要用到大数的乘法。
至于这个答案是怎么找到的,我反正表示无解。貌似群里有人用积分搞出来了,我可怜的《数学分析》!
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define MOD 1000 using namespace std; int ans,sum[110];//数组每个数存3位 void xx(int nn)//乘法 { sum[100]=1; while(nn--) { int sta=0; for(int ii=100;ii>=0;ii--) { int tt=sum[ii]; sum[ii]=(sum[ii]*ans+sta)%MOD; sta=(tt*ans+sta)/MOD; } } return ; } bool judge(int nn) { int kk=0; for(int ii=0;ii<=100;ii++)kk=(sum[ii]+kk*10000)%nn; if(kk==0)return true; return false; } void dd(int nn)//除法 { int uu=0; for(int ii=0;ii<=100;ii++) { int tt=uu; uu=(sum[ii]+uu*MOD)%nn; sum[ii]=(sum[ii]+tt*MOD)/nn; } return ; } int main() { int n; scanf("%d",&n); while(n--) { memset(sum,sizeof(sum)); int x,y; scanf("%d%d",&x,&y); ans=x; xx(y-1); int pp=y; for(int ii=2;ii<=pp;ii++) { while(y%ii==0) { if(judge(ii)){y/=ii;dd(ii);} else break; } } printf("%d/",y); for(int ii=0;ii<=100;ii++) { if(sum[ii]!=0) { printf("%d",sum[ii]); for(int jj=ii+1;jj<=100;jj++)printf("%03d",sum[jj]); break; } } printf("\n"); } return 0; }
ps:一个很诡异的事,我在赛后当天交的时候,如果MOD=10000的话,输出也变一下,那么会re,改成1000的就ac了。但是,但是,等我今天再交的话,两种都ac了。我在群里问,有人表示已经发生很多次了最近,已经喜闻乐见了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。