Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78139
  • 博文数量: 20
  • 博客积分: 2075
  • 博客等级: 大尉
  • 技术积分: 360
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-06 15:05
文章分类
文章存档

2012年(3)

2011年(1)

2010年(1)

2009年(1)

2008年(7)

2007年(7)

我的朋友
最近访客

分类: C/C++

2012-09-03 20:34:32

网上有很多关于埃拉托色尼筛选法的实现但没有利用链表的,下面是我写的程序
#include
#include
#include
using namespace std;
class prime
{
public:
struct list//可以建立有last的链表但会多占用50%内存
   {
int number;
list *Next;
   };
void showList(list*first)
{
cout<<"List:\n"<number<<"\t";
while(first->Next!=NULL)
{
cout<Next->number<<"\t";
first->Next=first->Next->Next;
}
cout<<"\nOVER By Steven Grove\n";
}
    list*MakeList(int left,int right)//建立链表(需要1<=Left<=right)
   {
  if(left<=right&&left>=1)
  {
  struct list* first=new list;
  struct list* temp=first;
  for(int i=left;i
  {
  temp->number=i;
  temp->Next=new list;
  temp=temp->Next;
  }
  temp->Next=NULL;
  temp->number=right;
  return first;
  }
  else
  {
  return NULL;
  }

   }
list*isPrime(list*first)
{
list*tempList=first->Next;//用于保存每一次中临时list
list*tempFirst=first->Next;//用来保存每一次的最小数
while(1)
{
if (tempFirst->Next!=NULL)//判断是否读取到最后一个(否:结束)
{
if(tempList==NULL||tempList->Next==NULL)//判断一次是否结束(是:结束)
{
tempFirst=tempFirst->Next;//下一次,最小数重新赋值
tempList=tempFirst;
}
else
{
if(tempList->Next->number%tempFirst->number==0)//判断是否为最小数的倍数
{
tempList->Next=tempList->Next->Next;
}
tempList=tempList->Next;
}
}
else
break;
}
return first;

}
};
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Press the max larger than 1 :\t";
int max;
scanf_s("%d",&max);
prime pi;
prime::list*first=pi.MakeList(1,max);
prime::list*result=pi.isPrime(first);
pi.showList(first);
_getwche();
return 0;
}
阅读(413) | 评论(0) | 转发(0) |
0

上一篇:ICCID最后一位计算软件(LUHN算法)

下一篇:没有了

给主人留下些什么吧!~~