B. Digits
题目链接:https://codeforces.com/contest/2043/problem/B
题意:
给定n和d,表示有一个由d进行n!次循环拼接成的数字(如1111,22222,33..),判断能否被1~9的奇数整除
思路:
对于这样的无限循环的数,可以视为X=d*(10^k-1)/9(k为d循环的次数)
也可以视为:X=d*1111.....
能被一个数整除,即对这个数的模数等于0
x(mod odd)=0
或者说只要第一项和第二项的质因子乘积能被答案整除即可
对于1:任何数都能被1整除
对于3:d=3时,或者n>=3(k为3的倍数即可)
证明:111能被3整除
111111=111x100+111
容易知道这个数也能被3整除(【一个数(仅限于3,9)被另一个数整除的条件是这个数所有位的数字之和能被另一个数整除】)
那么只要循环3的倍数次,即可被3整除
对于5:
显然5的倍数的个位数为5或者0,所以d=5时能被5整除
对于7:
d=7,或者n>=3(k为6的倍数即可)
因为111111能被7整除,所以111111111111也能被7整除
(10^6(mod7)=1)
对于9:
当d=3或6时,那么将d除过去,就是3的情况,即n>=3
当d=9时,可以
当d为其他数时,n>=6,即(k为9的倍数即可)
void solve(){
int n,d;cin>>n>>d;
cout<<1<<' ';
if(d%3==0||n>=3)cout<<3<<' ';
if(d==5)cout<<5<<' ';
if(n>=3||(d%7==0))cout<<7<<' ';
if(d%9==0||n>=6||(d%3==0&&n>=3))cout<<9;
cout<<endl;
}

浙公网安备 33010602011771号