Python(965文字)
私の質問は愛を得ていないからです。私はPythonで(非ゴルフゴルフ)ソリューションを投稿しています。
def numCollatzSteps(n):
numSteps=0
while n>1:
if n%2==0:
n//=2
else:
n=3*n+1
numSteps+=1
return numSteps
def findNonHaltingN():
for n in count(1):
if not h1(numCollatzSteps,n):
return n
print "The Collatz Conjecture is "+str(not h2(findNonHaltingN))
def isPrime(n):
for i in range(2,n):
if n%i==0:
return False
else:
return True
def isSumOf2Primes(n):
for i in range(2,n-2):
if isPrime(i) and isPrime(n-i):
return True
else:
return False
def findNonSum():
for i in count(4,2):
if not isSumOf2Primes(i):
return i
print "Goldbach's Conjecture is "+str(not h1(findNonSum))
def isSmallTwinPrime(n):
return isPrime(n) and isPrime(n+2)
def nextSmallTwinPrime(n):
for i in count(n):
if isSmallTwinPrime(i):
return i
def largestTwinPrimes():
for n in count(2):
if not h1(nextSmallTwinPrime,n):
return n-1,n+1
print "The Twin Primes Conjecture is "+str(not h2(largestTwinPrimes))
とても簡単です。
numCollatzSteps(n)は、特定のnに対するCollatzシーケンスのステップ数を示します。Collatzシーケンスが終了しない場合、無限に実行されます。
findNonHaltingN()は、numCollatzStepsがnごとに終了することを確認しながら上向きにカウントします。findNonHaltingNは、numCollatzStepsが終了しないnが存在する場合にのみ終了します。
したがって、findNonHaltingN()が停止しないことを確認することにより、Collatz予想が真であるかどうかを確認できます。
isPrime(n)は、1からn-1までの正の整数がそれを除算しないことを確認することにより、数値が素数であるかどうかをチェックします
isSumOf2Primes(n)は、2からn-2までのすべての正の整数を反復処理し、少なくとも1つがその補数とともに素数であることを確認します
findNonSum()は、2の素数の合計ではない最初の数に達するまで、4から偶数をカウントし、それを返します。そのような番号が存在しない場合、無限に継続します。
findNonSumが停止しないことを確認することで、Goldbachの推測が正しいかどうかを確認できます。
isSmallTwinPrime(n)は、nとn + 2が両方とも素数である場合にのみtrueを返します
nextSmallTwinPrime(n)は、isSmallTwinPrimeがtrueである次の数値> = nを返します
最大TwinPrimes()は、nextSmallTwinPrimeがすべてのnについて停止することを確認する2からカウントアップします。nextSmallTwinPrimeがnで停止しない場合、最大の双子素数はn-1とn + 1になり、そこで停止します。
次に、maximumTwinPrimesが停止しないことを確認することにより、双子素数予想の有効性を確認できます。