我是一生中从头开始学习编程。我正在学习Python语言。我的第一个困难任务是编写算法,检查数字是否为质数。
该脚本应该以非常简单的方式工作。您输入:
is_prime(29)
,您应该获得如下输出:
数字29是质数。
或
数字29不是素数。
我没有在互联网上检查任何解决方案。我自己做的。我的假设如下:
因此,我编写了代码,检查给定数字是否被2到(number-1)的所有数字相除。例如,如果给定值为“ 6”,则脚本首先检查6是否除以2。如果为true,则表示该数字不是质数。如果将6除以2,脚本将检查6是否除以3。如果是,则表示该数字不是质数。如果数字为“ 7”,脚本将检查7/2,然后是7/3,然后是7/4,然后是7/5,然后是7/6。
代码如下:
def is_prime(number):
if number == 0 or number == 1:
print(f"The number {number} is NOT the prime number.")
elif number == 2:
print(f"The number {number} is the prime number.")
else:
for i in range(2, number):
if number % i == 0:
check = "is NOT"
break
else:
check = "is"
print(f"The number {number} {check} the prime number.")
但是后来,我实际上意识到了三件事:
就是这样。所以我写了如下代码
def is_prime(number):
if number > 1:
if (number %2 == 0 and number != 2) or (number %3 == 0 and number != 3 ) or(number %5 == 0 and number != 5):
print(f"The number {number} is NOT the prime number. ")
else:
print(f"The number {number} is the prime number. ")
else:
print(f"The number {number} is NOT the prime number. ")
我认为两种解决方案都可以。 如果我错了,请纠正我 但是我想问你从编程的角度来看哪个解决方案更好?
答案 0 :(得分:2)
即使您的第一个是正确的,第二个也不是,您也可以通过以下方法提高算法的速度:
答案 1 :(得分:0)
您的原始代码看起来正确。第二个不排除像run_expect_scripts()
{
expect expect_script1
exit_value="$?"
output=$(expect expect_script2)
echo "$output"
return "$exit_value"
}
until [ run_expect_scripts -eq 0 -o a_counter -eq 5 ]; do
a_counter=$(expr a_counter + 1)
sleep 2s
done
use output of run_expect_scripts
这样的数字。
答案 2 :(得分:0)
您确认的关于我的第一个解决方案的另一件事是正确的。 在“ for”循环中要检查的范围是:
for i in range(2, number)
但是如果我错了,请纠正我,我认为范围=(2,数字/ 2)就足够了
例如,让我们考虑数字541,它是质数。我的代码将按以下方式对模进行检查:
541/2 541/3 541/4 。 。 。 541/538 541/539 541/540
但是检查大于值270(几乎是541的一半)的除数完全没有用。如果541不除以270,很明显就不能除以271、272、273、274、275等。
所以我认为拥有足够了:
for i in range(2, round(number/2)+1)
我必须加+ 1,因为否则我在为数字3运行函数时会出错。
您怎么看? 我对吗,检查范围(2,number / 2)而不是(2,number)就足够了吗?
答案 3 :(得分:-1)
def is_prime(number):
count = 0
for i in range(1,number+1):
if number%i == 0:
count +=1
if count == 2:
print('The number {0} is the prime number.'.format(number))
else:
print('The number {0} is NOT the prime number.'.format(number))