【发布时间】:2016-08-18 12:30:53
【问题描述】:
好的,所以我一直在尝试创建一个质数检查器。我已经成功地使它适用于特定的数字。代码在这里。
#To test if number is prime
prompt = input("number to test if prime: ");
n = prompt;
i = 2; #start of mod test
t = floor(sqrt(n));
counter = 0;
tic
for i = 2:t
if mod(n,i) == 0
disp('n is not prime')
break
else
counter = (counter + 1);
end
end
if counter == t-1
disp('n is prime')
end
toc
然后我尝试制作一个可以测试一系列数字的程序。对于 n = 10,它是成功的,但是当我高于它时,它似乎并没有拾取素数。我不确定我哪里出错了。
#Want to test numbers 2:n if they're prime
prompt = input("max number to test: ");
n = prompt;
l = 2; #start of mod test
counter = 0;
tic
for i = 2:n #cycle to test 2 up to n
t = floor(sqrt(i)) #Only need to test up to root of number
for l = 2:t
if mod(i,l) == 0
break
else
counter = (counter + 1);
end
end
if counter == t-1 # if tested up to the root of the number, it must be prime
prime = sprintf('%d is prime', round(i));
disp(prime)
counter = 0;
end
end
toc
非常感谢任何有助于使其适用于更大值的帮助,以及任何使代码更高效的方法。顶级程序可以在我的笔记本电脑上在 0.268 秒内测试 982451653。
【问题讨论】:
-
这是 1) 好玩吗? 2)上课? 3)或者你真的需要一个质数检查器?
-
只是为了好玩 :) 努力在大学重新开始之前在 matlab 上变得更好!
-
提高效率的小窍门:如果一个数字不能被 2 整除,那么它就不会是 4、6、8...,因此您可以大大减少检查次数。同样适用于 3、6、9 等...
-
为什么不直接使用
isprime? -
感谢Sembei,我会努力实现它。