中易网

用C++求1000以内质数,新手求教

答案:1  悬赏:0  
解决时间 2021-02-18 20:52
小弟最近才开始学习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;
}
最佳答案



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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
沙塘岸社区老年体育协会地址在哪,我要去那里
男羊1991女狗1994,可以婚配吗
一朵花的子房里有10个胚珠,当雄蕊产生的5粒
红英美发店在什么地方啊,我要过去处理事情
黄坑林业队这个地址在什么地方,我要处理点事
如果在机房里打扫卫生会有辐射嘛
直接学95绝技可以吗
立式多级泵怎样区分进水口
超智能足球里 为什么不能叫高玲姑姑
假如我需要的石材规格是600*250*150单位MM 别
女孩子读博士有多少好处
求勇者斗恶龙怪兽仙境完美存档
接吻时会导致呼吸困难是病吗
员工与领导在工作中发生纠纷
立邦易得佳、永得丽超易净、净味超白这三款漆
推荐资讯
17岁盗窃被抓,之后没有违法犯罪,现在可以开具
一个底面积是12平方厘米的圆柱和一个棱长是3
人民医院住院费每晚多少钱啊拜托各位大神
山药在东北冬季室外能否过冬
友林副食批发部在什么地方啊,我要过去处理事
《水浒》武松打虎120字左右概括,包括从中可
我的淘宝店铺已经三个商品涉嫌售假,扣六分了
用春和春秋冬作对比的作文
在校园网上怎么查等级考试报名情况
369汽车服务中心我想知道这个在什么地方
高速公路新线开通提前多久招收费员
电阻封装规格2w是什么意思
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?