• 全部
  • 问答

关于素数求法的问题

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;
}
}
}

问题在哪里,怎样修改,请赐教
...全文
186 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
矛盾博弈 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;
}
}
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-10 09:26
社区公告
暂无公告