| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 770 人关注过本帖
标题:[求助]如何改进计算a~b含有素数的个数的方法?
只看楼主 加入收藏
nap
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-4-20
收藏
 问题点数:0 回复次数:6 
[求助]如何改进计算a~b含有素数的个数的方法?

这个函数用于计算a~b含有素数的个数,但是效率太低,请帮忙改进一下或告诉一个好的方法.
#include "stdio.h"
#include<math.h>
#include<malloc.h>
struct sp
{
long int num;
struct sp *next;
};

struct sp * head;
struct sp * p,* p1,* p2;
main()
{
long int a,b,t,sum;
int i,j,k,f,g,m,n;
long int e;
double d;
d=500*sqrt(2);/*确定素数的范围*/
e=(int)d+1;
p=head=p1=p2=(struct sp *)malloc(sizeof(struct sp));

for(g=0,j=2;j<e;j++)
{ g=g+1;
if(n==1)
{head=p1;
p1->num=j;
}
else
p1->num=j;
p2->next=p1;
p2=p1;
p1=(struct sp *)malloc(sizeof(struct sp));
}/*建立连续的数字链条*/
p2->next=0;
for(p=head;p1->next!=0;p1=p1->next)
for(p2=p1->next;p2->next!=0;p=p2,p2=p2->next)
if(p2->num%p1->num==0)
{
if(p2->next==0)
p->next=0;
else
p->next=p2->next;
};/*建立含素数的链条*/

while(scanf("%ld%ld",&a,&b)==2&&a>=0&&b>=0&&a<=5e5&&b<=5e5)
{
if(a>b){ t=a;a=b;b=t;}/*使b大于a,ab范围在0~500000*/
sum=0;
if(a<=2&&b>=2)/使a从2开始*/
{ g=1;
a=2;
}
else
g=0;
for(;a<=b;a++)
{
n=0;
p=head;/*素数从头开始*/
do
{
if(p->num>=a)
break;
if(a%(p->num)==0)/*使a分别除小于a的素数*/
{
n=0;
break;
}
else
n=1;
p=p->next;
}while(p->next!=0);
if(n==1)/*是素数sum增加1*/
sum=sum+1;
}

printf("%ld\n",sum+g);
continue;
}
return 0;
}

搜索更多相关主题的帖子: 素数 改进 
2006-04-24 11:42
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
无需建链表来做.动态分配内存,用指针来做即使数据值大效率也不差.如果数据小,那么连指针都可以省了,因为效率差不多.

我的原则很简单:不做不喜欢的事!
2006-04-24 11:46
nap
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-4-20
收藏
得分:0 
如何动态分配内存,用指针来做?我只知道数组用指针来做.请举个例子好吗?谢谢
2006-04-24 11:52
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 

因为你不知道a,b之间有多少个数,所以可以用动态分配内存来分配,分配之后就相当于有多少个元素的数组嘛.


我的原则很简单:不做不喜欢的事!
2006-04-24 11:56
nap
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-4-20
收藏
得分:0 
[求助]

谢谢!
还是不知道如何用动态分配内存,有那些关于这方面的资料,能告诉我吗?
谢谢啦!!!!!!

2006-04-25 16:30
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用lj_860603在2006-4-24 11:46:00的发言:
无需建链表来做.动态分配内存,用指针来做即使数据值大效率也不差.如果数据小,那么连指针都可以省了,因为效率差不多.

就是这样的
楼主写了链表,还怎么在问怎么动态分配啊
看看书就有


明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-04-26 18:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
呵呵,既然知道链表就应该知道动态分配..~~

淘宝杜琨
2006-04-26 21:46
快速回复:[求助]如何改进计算a~b含有素数的个数的方法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047956 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved