题目大意: 给出m位n进制的数,要求它乘以2~m,求是否存在这样的数,乘以2~m之后得到的数是原来的数组成的数字。如:
2 x 142,857 = 285,714
3 x 142,857 = 428,571
4 x 142,857 = 571,428
5 x 142,857 = 714,285
6 x 142,857 = 857,142
我的新思路是:所求的这个数字必然是一个m位数,其中每一位都是n-1,再拿这个数除以m得到的数字。也就是说,如果求得的这个数字不满足题目条件,就不存在这样的数。如:
n=10,n-1=9;
999999/7=142857,
142857符合题意。
代码如下:
#include<iostream>//观察
#include<cstring>
#define int long long
using namespace std;//然后大胆猜想
int m,n,a,b[402];
bool d,vis[402];
signed main(){
ios::sync_with_stdio(false);
b[0]=-1;
while(cin>>m>>n&&m){
d=false,a=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++){
a*=n,a+=n-1;
}
a/=m+1;
for(int i=1;i<=m;i++){
b[i]=a%n,a/=n;
if(vis[b[i]])d=true;
vis[b[i]]=true;
}
if(d)cout<<"Not found."<<endl;
else{
for(int i=m;i;i--){
cout<<b[i];
if(i>1)cout<<" ";
else cout<<endl;
}
}
}
return 0;
}
求证实或证伪。
Aya非常可爱。