時々、目の前に出てくる数字をなんとなくしようとするとき¹、しばらくして、思ったより簡単だと気づきました。テイク2156例えば:最終的には、両方のことを私に起こる21と56の倍数である7ので、確かに、とは2156 = 21 x 100 + 56またの倍数です7。
あなたの仕事は、この種の偶然の一致により因数分解しやすい数字を識別するコードを書くことです。
より正確に:
n入力として正の整数を取り、2つに切り分けてそれぞれが2の倍数である2つの正の整数を生成できる除数d(より大きい1)が存在する場合、真理値を返すプログラムまたは関数を記述します。そうでない場合は、偽の値を返します。nd
- 「2つにチョップ」とは、あなたが考えることを意味します。
nある時点で前半と後半に分割され、他の2つの10進整数を生成する通常の10進表現です。2番目の整数の先頭にゼロが付いていても問題ありません(ただし、正の整数である必要があるため、分割1230して有効123で0はないことに注意してください)。 - 真実の値と偽の値は入力に依存します。たとえば、選択した言語でゼロ以外の整数が真である場合、除数
dまたはn(またはnそのこと自体)。 - たとえば、セット内の少なくとも2桁の偶数
{2, 4, 6, 8}があると、真の値が得られます。最初の偶数の後に分割するだけです。また、たとえば、n1桁の数値と同様に、素数は偽の値を生成します。 - 素因数を考慮するだけで十分です。
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
¹はい、私は本当にこれをします