時々、目の前に出てくる数字をなんとなくしようとするとき¹、しばらくして、思ったより簡単だと気づきました。テイク2156
例えば:最終的には、両方のことを私に起こる21
と56
の倍数である7
ので、確かに、とは2156 = 21 x 100 + 56
またの倍数です7
。
あなたの仕事は、この種の偶然の一致により因数分解しやすい数字を識別するコードを書くことです。
より正確に:
n
入力として正の整数を取り、2つに切り分けてそれぞれが2の倍数である2つの正の整数を生成できる除数d
(より大きい1
)が存在する場合、真理値を返すプログラムまたは関数を記述します。そうでない場合は、偽の値を返します。n
d
- 「2つにチョップ」とは、あなたが考えることを意味します。
n
ある時点で前半と後半に分割され、他の2つの10進整数を生成する通常の10進表現です。2番目の整数の先頭にゼロが付いていても問題ありません(ただし、正の整数である必要があるため、分割1230
して有効123
で0
はないことに注意してください)。 - 真実の値と偽の値は入力に依存します。たとえば、選択した言語でゼロ以外の整数が真である場合、除数
d
またはn
(またはn
そのこと自体)。 - たとえば、セット内の少なくとも2桁の偶数
{2, 4, 6, 8}
があると、真の値が得られます。最初の偶数の後に分割するだけです。また、たとえば、n
1桁の数値と同様に、素数は偽の値を生成します。 - 素因数を考慮するだけで十分です。
d
。 - 入力が有効であると仮定できます(つまり、正の整数)。
これはコードゴルフですであるため、バイト単位の最短コードが優先されます。しかし、すべての言語のソリューションは歓迎されているため、全体の最短コードだけでなく、各言語の最短コードを目指して努力することができます。
テストケース
(真実または偽の値のみを出力する必要があります。以下の注釈は説明のためのものです。)真実の値を生成する入力は次のとおりです。
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
偽の値を生成する入力は次のとおりです。
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹はい、私は本当にこれをします