SRM473 Div2 Hard(1000) ChildlessNumbers
kを整数として、X=kYとなるXのみ調べる。
Y = kY/D(kY)
⇔ k = D(kY) ≦ 9 log10kY = 9 log10k + 9 log10Y
なので、k<200 程度で充分。
class ChildlessNumbers { int D( long long n ); public: int howMany( int A, int B ); }; int ChildlessNumbers::D( long long n ) { int r = 0; while ( n > 0 ) r += n % 10, n /= 10; return r; } int ChildlessNumbers::howMany( int A, int B ) { int c = 0; for ( int Y=A; Y<=B; Y++ ) { bool f = true; for ( long long k=1; f && k<200; k++ ) if ( k*Y/D(k*Y) == Y ) f = false; if ( f ) c++; } return c; }