对于UVA10825的一点新思路,求证实或证伪
  • 板块学术版
  • 楼主pengpengXiuEr
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/6/16 20:06
  • 上次更新2023/10/27 23:12:28
查看原帖
对于UVA10825的一点新思路,求证实或证伪
660645
pengpengXiuEr楼主2022/6/16 20:06

链接:UVA10825

题目大意: 给出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非常可爱。

2022/6/16 20:06
加载中...