以下是素数的计算。我试图解构它以更好地理解循环。此外,我想调整此函数,通过比较一个数字与其平方根而不是这种方式来查找素数:
(假设在int main之前做出了适当的声明)
//确定数字是否为素数
bool isPrime (long n)
{
int a;
if (n == 1)
{
return false;
}
for (a = 2; a <= (n / 2); a++)
{
if ((n % a) == 0)
{
return false;
}
}
return true;
}
然而,观察这个循环,我有一个问题,看我是否正确地观察这个函数开始。从我看来,看起来int a;
是计数器,它从2开始,因为0和1不是素数。 n应该是形式变量。它指出,对于除以2时小于或等于其自身的每个数字,如果剩余大于零,则返回bool的true。同时,如果一个数字均匀地除以2(所以没有余数),那么它不被认为是素数(bool返回false)。那个听起来是对的吗?如果没有,请让我知道我在哪里做错了。如果我做对了,那就到了节目的后半部分。
现在,primeCount;
仅限于primeCount (2, 50000);
,但第一个功能在此输入:
//使用isPrime函数计算和组织素数
long primeCount (long x, long y)
{
bool prime;
int b;
int c = 1000;
int counter = 0;
int totalSum = 0;
for (b = 1; b <= y; b++)
{
prime = isPrime (b);
if (prime == true)
{
counter++;
}
if (b == c)
{
cout << setw(10) << left << (b - 999) << setw(10) << left << b << setw(12) << counter << endl;
cout << fixed << showpoint << setprecision(2) << endl;
totalSum = totalSum + counter;
counter = 0;
c = c + 1000;
}
}
现在,我认为x和y是形式变量,但我不知道x应该代表什么。它代表int c;
吗?该函数中的for循环让我很困惑。我不明白。任何可以照亮的光都会受到赞赏。
至于平方根查询,我是否需要使用3个嵌套for循环来获得素数?像这样:
for (a > m => b)
for (a==m => b==m)
for (a < m => b>m)
以这种方式定位素数会比这里所示的方式更复杂或更复杂吗?我知道要解决这个问题很多。如果你们建议我把它分成不同的帖子,我会编辑这个帖子并将后半部分发布在不同的帖子中。谢谢你的帮助!只是一个新手C ++程序员试图从这些东西中做出正面和反面:)
答案 0 :(得分:1)
第一个函数isPrime()
完成它应该做的事情。如果数字是素数,则返回true,否则返回false。循环变量a
仅运行到n/2
的原因是因为任何数字n
都不能具有大于n/2
的因子(除了它自身)。例子? 6 -- 1, 2, 3 and 6
,12 -- 1, 2, 3, 4, 6 and 12
。循环只是试图查看a
是否有任何因素(数字除以它而不留下余数)。如果是,它不是素数(return false
),否则它是(return true
)。
但我觉得primeCount()
并没有完全按照预期行事。
根据primeCount()
的定义,我认为它的目的是计算从x
到y
的素数总数(在您的情况下为2到50000,因为您提到了{{ 1}}调用main()
)。但是,要执行此操作,必须将primeCount(2, 50000)
循环更改为此
for
此处变量for (b = x; b <= y; b++)
的作用是检查循环变量c
的每千个值。
请注意,在第一次运行时,b
即b = 1000
程序会打印到目前为止遇到的素数(b == c
)。之后,counter
重置为counter
,0
现在为c
。然后,2000
从b
转到1001
并且同样的事情重复,直到2000
为50000。
总体而言,我们的目标是打印从b
到2
的每1000个自然数中存在的素数。
答案 1 :(得分:0)
for (a = 2; a <= (n / 2); a++)
{
if ((n % a) == 0)
{
return false;
}
}
这是您使用的“for”循环。它在除以每个“a”时检查n的余数,从2迭代到n /(n的一半(整数除))。如果这些余数中的任何一个为零,则n是一个复合,并且没有必要继续前进。我们只是返回一个假 - 这个数字不是素数。
可以安全地假设,如果我们在(n / 2)之前没有找到n的除数,那么这个数字是素数,所以在我们尝试所有可能的除数猜测之后,如果我们得到那么远,我们就会返回数字是素数。