注册 登录
编程论坛 C++教室

一个代码。。。感觉有点问题

cj0608 发布于 2009-07-27 11:57, 971 次点击
#include<iostream.h>
const int MAX_NUM=1000;
void main()
{
unsigned char sieve[MAX_NUM+1];
long i,j,k=0;
for(i=2;i<=MAX_NUM;i++)
   sieve[i]=1;
for(i=2;i<=MAX_NUM;i++)
{
  if(sieve[i]==1)
  {k++;
   cout<<i<<“”;
  if(k%15==0)
  {cout<<endl;
   k=0;
   }
   for(j=i+i;j<=MAX_NUM;j+=i);
     sieve[j]=0;
  }
}
 cout<<endl;
}
好像说是用埃拉托斯特尼筛选求素数,还不知道是什么原理。。
12 回复
#2
fjwddzzc1232009-07-27 12:19
代码上面都有几个错误   你有没有编译过啊  cout<<i<<“”;符号都错了
#3
ET_bug2009-07-27 16:13
这是什么??
输出数组的下标???
#4
cj06082009-07-27 16:27
回复 楼主 cj0608
晕。。我书里面抄过来的。。。
#5
spoctor2009-07-27 20:29
这还用抄?呵呵,楼主真强!
#6
明次2009-07-27 20:34
符号的确错了...
#7
cj06082009-07-27 21:12
晕。。又不是不知道?就是觉得书里有错才发上了问下。。。5楼的嚣张个吊。。
#8
cj06082009-07-27 21:17
回2楼和5楼:
cout<<i<<“”;
这里是输出i和一个空格。。没错。。我空格没打出来
#9
yu5890681yu2009-07-27 21:22
回复 楼主 cj0608
楼主的代码貌似根本就不能求素数,楼主要是想要求素数的代码可以用这个
#include<iostream.h>
#include<math.h>
main()
{
      int a[1000];
      int i;
      for(i=1;i<=1000;i++)
      a[i]=i;
      for(i=2;i<1000;i++)
      {
                         for(int j=2;j<=sqrt(i);j++)
                         {
                                 if(i%j==0)
                                 a[i]=0;
                         }
      }
      for(i=1;i<1000;i++)
      {
      if(a[i]!=0)
      cout<<a[i]<<"\t";
      }
      int x;
      cin>>x;
      return 0;
}
#10
fjwddzzc1232009-07-27 21:42
回复 9楼 yu5890681yu
你要输出i和 空格  我理解   不过 cout<<i<<“”;中的符号 (“”;)  要用("";)
#11
cj06082009-07-28 00:20
今天看了那个原理了。。差不多明白了哈:例如要找2~30中的素数,开始时筛中有2~30的数,然后将筛中的最小素数2,并把2的倍数都排除,这样第一步以后,筛中还剩2和奇数。重复上诉步骤,在筛中保留的中去次小数3作为素数,并将3的倍数排除,反复上述步骤,直至筛中素数7大于30的平方根是结束。。。
我的VC++6.0给坏了。。不能用。。正在下载中,家里网速好慢。。所以发上来前没测下代码,不好意思。。双引号用中文输入发打了没发现。。
#12
forclwy2009-07-28 16:13
这个代码是求素数的,还是很有意思的说呢
#13
zwei_02009-07-28 16:18
Eratosthenes 筛法求素数
#include<iostream.h>
#include<iomanip.h>
void main()
{
const int n=1000;
int i=1,j,count=0,sieve[n+1];
for(j=1;j<n;j++)sieve[j]=j; // 把1~n存入sieve[n]
while(i<n+1) // 从while循环开始完成全部素数的产生和输出。
{
while(sieve[i]==1) i++; // 跳过值为1的分量,表示下一个分量必为一素数
cout<<setw(4)<<sieve[i]; // setw(4)设置以宽度为4的格式输出数据。setw(4)
// 等价于cout.width(4)
count++;
if(count%15==0)cout<<endl;
for(j=i;j<n+1;j+=i)
sieve[j]=1;
}
}
1