[BZOJ2296]随机种子

给出一个范围在[0,1e6]的数n,需要构造一个数m,使得m是n的倍数,m属于[0,1e16]且m包含[0,9]的所有数字

若不存在,输出-1

当n=0时输出-1

当n属于[1,1e6)时

  m=(9876543210*1e5+n)-(9876543210*1e5+n)%n

  这样,这个数的前10位不会改变,所以保证有[0,9],又减去了模n的余数于是可以被整除,位数正好

当n=1e6是用上述构造方法位数会超,然而只用输出9876543210*1e5就行了,,,

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const long long Must=9876543210000000;
 4 int main(){
 5     int T; 
 6     long long n;
 7     scanf("%d",&T);    
 8     while(T--){
 9         scanf("%lld",&n);
10         if(!n)puts("-1");
11         else printf("%lld\n",(Must+n)-(Must+n)%n);
12     }
13     return 0;
14 }
View Code

 

posted @ 2016-04-25 11:48  Ngshily  阅读(186)  评论(0编辑  收藏  举报