小弟最近才开始学习C++,遇到这样一条题目,书上给出答案,但是我看不懂,特别是while语句里面的条件,求各路大神指教
#include "stdafx.h"
#include
bool EnumPrimeNum(const int max)
{
int isqr = (int)sqrt(max);
int *pvar = new int[isqr];
for (int j=0; j pvar[j] = 0;
int i = 2;
bool ret = true;
while (ret && i <= (int)sqrt(max))
{
if (pvar[i-2]==0)
{
if (max % i ==0)
ret = false;
else
{
int next = i + i;
while (next < (int)sqrt(max))
{
pvar[next-2] = 1;
next += i;
}
}
}
i++;
}
delete []pvar;
return ret;
}
int main(int argc, char* argv[])
{
int num = 1000;
int counter = 0;
for(int i = 2; i< num; i++)
if (EnumPrimeNum(i))
{
counter++;
printf("%4d",i);
if (counter % 10 == 0)
printf("\n");
}
return 0;
}
用C++求1000以内质数,新手求教
答案:1 悬赏:0
解决时间 2021-02-18 20:52
- 提问者网友:离殇似水流年飞逝
- 2021-02-18 07:01
最佳答案
- 二级知识专家网友:嗷呜我不好爱
- 2021-02-18 07:36
bool EnumPrimeNum(const int max)
{
int isqr = (int)sqrt(max);
int *pvar = new int[isqr];
for (int j = 0; j pvar[j] = 0;
int si = sizeof(pvar);
int i = 2;
bool ret = true;
while (ret && i <= (int)sqrt(max))
{
// 判断下标为i-2的元素是否等于0
if (pvar[i - 2] == 0)
{
// 如果目标数max能整除i,则设为false,即为合数而非质数
if (max % i == 0)
ret = false;
else
{
// next的值为i的2倍
int next = i + i;
// 如果next小于max的算术平方根
while (next {
pvar[next - 2] = 1;
next += i;
}
}
}
i++;
}
delete[]pvar;
return ret;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯