https://cs50.harvard.edu/x/2023/problems/1/prime/
从讲座1
我需要找到素数从1-100通过使用
练习使用forloop
使用模
创建布尔函数
我已经意识到如何解决这个问题,我错在哪里,但我不明白为什么。
#include "cs50.h"
#include <stdio.h>
bool prime(int number);
int main(void)
{
int min;
do
{
min = get_int("Minimum: ");
}
while (min < 1);
int max;
do
{
max = get_int("Maximum: ");
}
while (min >= max);
for (int i = min; i <= max; i++)
{
if (prime(i))
{
printf("%i\n", i);
}
}
}
// print only prime numbers in the range
// takes in int number, output bool T/F
bool prime(int number)
{
// 1 is not prime, 2 is prime
if (number < 2)
{
return false;
}
for (int i = 2; i < number; i++)
{
// not prime
if (number % i == 0)
{
return false;
}
// is prime
else
{
return true;
}
}
return number; // has an output
}
这是我最初的答案,但它只是打印奇数。我的程序工作后,删除
// is prime
else
{
return true;
}
但我不知道为什么,有人能解释一下吗?谢谢。
2条答案
按热度按时间7vux5j2d1#
我的程序在删除
else { return true; }
后工作我真的不明白为什么,有人能解释一下吗?
考虑下面的
for
循环。在第一次迭代中,当number % i == 0
为true且为false
时,code * 返回 *。通过移除第二返回路径,循环可以再次迭代。
其他改进
number
的平方根就足够了。代码从O(n)到O(sqrt(n))-快得多。cyvaqqii2#
一个质数的技术定义是一个有两个倍数的数字,它们是1和它自己。为了检查某个数字是否是质数,你可以循环所有的数字,然后你试图用测试数字除以这些数字中的每一个,并检查余数。如果余数为0,那么你就中断并返回一个false函数。下面是一个简单的C实现。
要得到所有小于100的素数,那么你需要一个loo和我们上面实现的函数。