我打算作死用Julia去写欧拉计划了,能更新多少是多少
如果有更好的解请在评论里留言
辅助模块
习题
solution 1
答案:234168
# Problem 1
# 3的倍数和5的倍数
# 如果我们列出10以内所有3或5的倍数,我们将得到3、5、6和9,这些数的和是23。
# 求1000以内所有3或5的倍数的和。
function solution_1()
fn = x->x % 3==0 || x % 5 ==0
reduce((r,x)->r+x,
filter(fn,1:1000);init=0)
end
solution2
ans: 4613732
# Problem 2
# 偶斐波那契数
# 斐波那契数列中的每一项都是前两项的和。由1和2开始生成的斐波那契数列前10项为:
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
# 考虑该斐波那契数列中不超过四百万的项,求其中为偶数的项之和。
function solution_2()
reduce(+,
Iterators.filter(x->x % 2==0,
Iterators.filter(x->x<4000000,
Iterators.take(fib,40))))
end
solution3
ans: 6857
divsible(a,b) = a % b == 0
function factor(n,__primes=collect(Iterators.take(primes,1000)),res=[])
div = first(__primes)
if divsible(n,div)
if n == div
return push!(res,n)
else
return factor(Int(n/div),__primes,push!(res,div))
end
else
return factor(n,Iterators.drop(__primes,1),res)
end
end
function solution_3()
last(factor(600851475143))
end
solution4
ans: 580085
Clojure 实现
(let [isPalindrome? (fn [n]
(let [s (seq (str n))]
(= s (reverse s))))]
(first (for [num1 (range 999 99 -1)
num2 (range 999 99 -1)
:let [n (* num1 num2)]
:when (isPalindrome? n)]
n))))
转成Julia
function solution_4()
first(Iterators.filter(isPalindrome,
Base.Generator(x->reduce(*,x;init=1),
Iterators.product(999:-1:100,999:-1:100))))
end
solution5
ans: 232792560
function gcd(a,b)
temp = a % b
if temp == 0
b
else
gcd(b,temp)
end
end
function lcm(a,b)
g = gcd(a,b)
d = a / g
Int(b * d)
end
function solution_5()
reduce((r,x)->lcm(r,x),1:20;init=1)
end
solution 6
ans: 25164150
function solution_6()
nums = 1:100
a = reduce(+,nums;init=0)^2
b = reduce((r,x)->r+x^2,nums;init=0)
a-b
end
solution7
ans: 104743
function solution_7()
last(collect(Iterators.take(primes,10001)))
end
solution9
ans: 31875000
纯数学方法
solution10
ans: 我已经运行十几分钟了,就差程序错误,还是得不到答案
142913828922
用了一次break,虽然不想用这个东西
function solution_10()
sum = 0
for i in primes
if i < 2000000
sum += i
else
break
end
end
sum
end