我是swift的新手,我经常在项目euler上解决一些问题,以熟悉一种新语言。
问题7是一个很好的例子,所以我会发布我的代码,我试着几乎以同样的方式编写它们......
的Python ....
def is_prime(x):
div_by = [i for i in range(2, int(x ** 0.5) + 1)]
for i in div_by:
if x % i == 0:
break
else:
return True
primes = 0
test = 2
while True:
if is_prime(test):
primes += 1
if primes == 10001:
break
test += 1
print('the 10001st prime:', test)
print('finished in:', time.clock() - start_time, 'seconds')
输出:
('the 10001st prime:', 104743)
('finished in:', 1.8959460000000001, 'seconds')
...ç
int is_prime(int num)
{
int sqrtDiv = lround(sqrt(num));
while (sqrtDiv > 1) {
if (num % sqrtDiv == 0) {
return(0);
} else {
sqrtDiv--;
}
}
return(1);
}
int main ()
{
clock_t start = clock();
int primes = 0;
int numbers = 2;
while (primes < 10001) {
if (is_prime(numbers)) {
primes+= 1;
}
numbers += 1;
}
//Had to do -1 at the end because I added one to numbers after every loop, even when it found the last prime.
printf("The 10,001st prime number is: %d\n", numbers - 1);
clock_t end = clock();
double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
printf("Finished in %f seconds.\n", time_elapsed_in_seconds);
}
输出:
The 10,001st prime number is: 104743
Finished in 0.056207 seconds.
...夫特
public func is_prime(num:Int) -> Bool {
let sq = sqrt(Double(num))
for i in 2...Int(sq) + 1 {
if num % i == 0 {
return false
}
}
return true
}
public func problem7() {
var primes:Int = 1
var next:Int = 3
while primes < 10001 {
if is_prime(next) {
primes += 1
}
next += 1
}
print("THe 10,001st prime is: ", next - 1)
}
我甚至没有时间,但是它在几分钟的范围内......为什么会这么慢,是不是意味着做这种事情?我做错了什么,或者这就是它的样子?
答案 0 :(得分:2)
Swift编译器假设您不关心生成的代码运行速度有多慢,除非您请求某些编译器优化,例如通过设置编译器标志,例如-Ofast
否则,Swift编译器似乎会在编译结果中添加一公吨额外和慢速的机器代码,可能有助于调试。