主题:[讨论]一个求素数的问题
lxk115
[专家分:10] 发布于 2011-09-10 18:05:00
#include <stdio.h>
int main()
{
int val,i,k;
scanf("%d",&val);
for(i=2;i<=val;++i)
{
for(k=2;k<i;++k)
{
if(i%k==0)
break;
}
if(k==i)
printf("%d\n",i);
else
continue;
}
return 0;
}
我想问问这段代码在逻辑上有没有错误!!
回复列表 (共5个回复)
沙发
lxk115 [专家分:10] 发布于 2011-09-10 18:09:00
还有就是~没有其它办法求这个的!!高手麻烦说下!!
板凳
fragileeye [专家分:1990] 发布于 2011-09-11 01:33:00
没有逻辑错误,但是代码太罗嗦。其他方法也是有的,比如ERATOSTHENES筛选法,百度吧。
这是用这个方法写的代码,不过我就以求100以内素数作为实例吧:(随便写的,仅供参考)当然还有很多其他好的算法,lz自己查查吧
#include <stdio.h>
#define RANGE 100
#define N 25 //至于N的设置,按情况定,往后素数越来越稀这是肯定的
int Prime_Num[N] =
{
2, 3, 5, 7
};
const int ct_prime = 4; //sqrt(RANGE)个素数,10以内的可以枚举,往后可以按下列方法添加
int main(int argc, char *argv[])
{
int i, k, count;
count = ct_prime;
for (i = 2; i <= RANGE; ++i)
{
for (k = 0; k < ct_prime; ++k)
{
if (i % Prime_Num[k] == 0)
{
break;
}
}
if (k == ct_prime)
{
Prime_Num[count] = i;
count++;
}
}
for (i = 0; i < count; ++i)
{
printf("%d\n", Prime_Num[i]);
}
return 0;
}
3 楼
lxk115 [专家分:10] 发布于 2011-09-11 17:04:00
怎么我感觉你写的比我的还复杂呢= =。
4 楼
457636876 [专家分:0] 发布于 2011-09-11 17:53:00
欢迎加QQ群来 欢迎大家 提问
QQ群:C C++ linux 软件基地① 64222213 满
QQ群:C C++ linux 软件基地② 93623167 没满
QQ群:C C++ linux 软件基地③ 167881329 满
QQ群:C C++ linux 软件基地④ 174551731 高级群(没满)
5 楼
fragileeye [专家分:1990] 发布于 2011-09-11 18:56:00
算法是这样的,至于复杂,我真不知道该如何解释了、、、如果跑1亿内的素数lz想过没呢,呵呵[em9]
我来回复