关于素数求法的问题

lc19890326 2008-04-10 09:26:38
求一个函数,void jsValue(int m,int k,int xx[]);功能是求m后的k个素数,然后存入xx[]中,例如m=17,k=3,则xx[3]={19,23,29}
我写的算法如下,运行时貌似算不出来请各位指点一下有什么问题

void jsValue(int m,int k,int xx[MAX])
{
int i=0,j,count=0; //count用于计算以求素数的个数
while(count!=k)
{
for(j=2;j<=m;++j)
if(m%j==0)
break;
m++;
if(j>m) //找到素数
{
count++;
xx[i++]=m;
}
}
}

问题在哪里,怎样修改,请赐教
...全文
252 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
矛盾博弈 2008-09-17
  • 打赏
  • 举报
回复
学习
Yoon_EunHae 2008-04-15
  • 打赏
  • 举报
回复
up!
先打个表 ..
你那没效率
freeCodeSunny 2008-04-13
  • 打赏
  • 举报
回复
直接先打表,在找几可以了啊!为什么非要调用函数呢??
lc19890326 2008-04-11
  • 打赏
  • 举报
回复
楼上,应该是if(j*j>m)

谢谢指导
rushman 2008-04-10
  • 打赏
  • 举报
回复
void jsValue(int m,int k,int xx[MAX])
{
int /*i=0, 可以用count代替,语义相同*/j,count=0; //count用于计算以求素数的个数
/*
* 这里最好是换个判断条件,避免 k < 0时无法退出循环
*/
// while(count!=k)
while(count < k)
{
/*
* 实际上当 j 的平方大于 m 时,m 就已经不可能是素数了
* 所以可以改一下
*/
// for(j=2;j<=m;++j)
for(j = 2; j*j <= m;j++){
if(m%j==0)
break;
}
/*
* m 递增是不是应该放到后面?
*/
// m++;
/*
* 这里的判断条件是不是搞错了?
*/
// if(j>m) //找到素数
if(j * j <= m)
{
/*
* count 和 i 有什么不同吗?
* 是否可以把 i 用 count 代替
*/
// count++;
// xx[i++]=m;
xx[count++] = m;
}
m++;
}
}

去掉注释后是这个样子
void jsValue(int m,int k,int xx[MAX])
{
int j,count=0; //count用于计算以求素数的个数
while(count < k)
{
for(j = 2; j*j <= m;j++){
if(m%j==0)
break;
}
if(j * j <= m)
{
xx[count++] = m;
}
m++;
}
}
medie2005 2008-04-10
  • 打赏
  • 举报
回复
why?
ryfdizuo 2008-04-10
  • 打赏
  • 举报
回复
ls的,t应该是从m开始了,
medie2005 2008-04-10
  • 打赏
  • 举报
回复
未调试,你看对不对.
void jsValue(int m,int k,int xx[MAX])
{
int j,count=0; //count用于计算以求素数的个数
for( int t=m+1; count!=k; ++t )
{
for(j=2;j<t;++j)
if(t%j==0)
break;
if(j==t) //找到素数
xx[count++]=t;
}
}

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧