Data update
This commit is contained in:
parent
29a5eea0d4
commit
5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions
51
Task/Weird-numbers/Python/weird-numbers-2.py
Normal file
51
Task/Weird-numbers/Python/weird-numbers-2.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# anySum :: Int -> [Int] -> [Int]
|
||||
|
||||
from time import time
|
||||
start = time()
|
||||
|
||||
primitivesp_nos = set(); primes = []
|
||||
|
||||
def main():
|
||||
x = 2; weird_nos = []
|
||||
n = 50
|
||||
while n > 0:
|
||||
if isweird(x) == 1: weird_nos.append(x); n = n - 1
|
||||
x = x + 1
|
||||
print("First", len(weird_nos), "weird nos:\n", weird_nos)
|
||||
|
||||
def isweird(n):
|
||||
global primes; global primitivesp_nos; pr_fctrs = []; a = n
|
||||
for i in primes:
|
||||
while a % i == 0: pr_fctrs.append(i); a = a//i
|
||||
if i * i > a: break
|
||||
if a > 1: pr_fctrs.append(a)
|
||||
if a == n: primes.append(n); return 0
|
||||
sum_fctrs = 1; divisors = set(pr_fctrs)
|
||||
for i in divisors: sum_fctrs = sum_fctrs*(i**(pr_fctrs.count(i)+1)-1)//(i-1)
|
||||
difference = sum_fctrs - 2 * n
|
||||
if difference <= 0:
|
||||
if difference == 0: primitivesp_nos.add(n)
|
||||
return 0
|
||||
# Next 10 lines from Jerome Richard: stackoverflow.com/questions/6800193
|
||||
divisors = [1]; last_prime = 0; fctr = 0; slice_len = 0
|
||||
for prime in pr_fctrs:
|
||||
if last_prime != prime: slice_len = len(divisors); fctr = prime
|
||||
else: fctr *= prime
|
||||
for i in range(slice_len):
|
||||
d = divisors[i] * fctr
|
||||
if d not in primitivesp_nos: divisors.append(d)
|
||||
else: return 0
|
||||
last_prime = prime
|
||||
x = 1; divisors = set(i for i in divisors if i <= difference)
|
||||
ns = n - (difference + n - sum(divisors))
|
||||
if ns < 0: return 1
|
||||
for d in divisors: x |= x << d
|
||||
if x >> ns & 1: primitivesp_nos.add(n); return 0
|
||||
else: return 1
|
||||
|
||||
main()
|
||||
|
||||
end = time()
|
||||
print("Execution time: ", round(end - start, 2), "s")
|
||||
|
||||
-- -> [100,96]
|
||||
Loading…
Add table
Add a link
Reference in a new issue