考虑第1讲中的 Prime(CS50)。
我需要找到从1到100的素数,使用:
- 练习使用 for 循环
- 使用模
- 创建布尔函数
我已经意识到如何解决这个问题,我错在哪里,但我不明白为什么。
#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.
// It takes in int number, and outputs bool true or false
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条答案
按热度按时间ekqde3dh1#
我的程序在删除
else { return true; }
后工作我真的不明白为什么,有人能解释一下吗?
考虑下面的
for
循环。在第一次迭代中,当number % i == 0
为true且false
为true时,code * 返回 *。通过移除第二返回路径,循环可以再次迭代。
其他改进
number
的平方根就足够了。代码从O(n)到O(sqrt(n))-快得多。ovfsdjhp2#
素数的技术定义是一个有两个倍数的数字,它们是1和它本身。要检查某个数字是否是质数,您可以循环遍历减去测试数字的所有数字,然后尝试将测试数字除以这些数字中的每一个,并检查余数。如果余数为0,则中断并返回函数的false。下面是一个简单的C实现。
要得到所有小于100的素数,你需要一个循环和我们上面实现的函数。