当前位置: 代码迷 >> C语言 >> 求2-----32767之间的素数
  详细解决方案

求2-----32767之间的素数

热度:213   发布时间:2007-07-20 16:08:29.0
不对啊
if(n%i==0)
break;}
有这个语句,1002也只要1下
for(n=1;n<=32767;n++)这个语句不好,

其实只要
for(n=1;n*n<=32767;n++)
就可以了
至于32767是不是素数,那先试一下就行

----------------解决方案--------------------------------------------------------

本人写的一个,感觉效率还算不错,可以很快求出结果来(感觉应该还不到1秒钟,高效率吧~~~)
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include<fstream>
using namespace std;
void main(void)
{
ofstream inOut;
inOut.open("1.txt",ios::out);
int a[32768];
for(int n=0;n<32768;n++)a[n]=1;
for(long i=2;i<32768;i++){
for(long j=2,index=i*j ;index< 32768,j<(32768/i)+1;j++)
{
index =i*j;
a[index]=0;
}
}
for(int k=1;k<32768;k++){
if(a[k]==1)
inOut<<k<<"是质数!"<<"\n";
}
inOut.close();
}

[此贴子已经被作者于2007-7-20 16:53:45编辑过]


----------------解决方案--------------------------------------------------------
最好还是用筛法。
----------------解决方案--------------------------------------------------------
回复:(楚扬)求2-----32767之间的素数
语法是java的 和c类似 算法都差不多
for(int i = 2;i <= 32767;i++){
int flag = 0;
for(int j = 2; j<i; j++){
if( i%j == 0){
flag = flag + 1; //解决你问题的地方,当然方法不止一种
}
}
if(flag == 0){
System.out.println(i); //输出素数
}
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
void main(void)
{int i,n=2;
for(i=3;i<=32767;i+=2)
{while(++n<i)
if(i%n==0) break;
if(n==i) printf("%d ",i);
n=2;
}
}
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<math.h>
#define N 32767

main()
{
int i,n,flag;

for(n=2;n<=N;n++)
{
i = 2;
flag = 1;
while(flag&&i<=sqrt(n))
{
if(n%i++==0)
flag = 0;
}
if(flag)
printf("%6d",n);
}

return 0;
}

我觉得能不用break就不用break


----------------解决方案--------------------------------------------------------
15楼的可以出结果,不过效率太低
----------------解决方案--------------------------------------------------------