首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

3到1000之间的素数解决方案

2012-02-22 
3到1000之间的素数[codeC/C++][/code]#includestdio.h#includemath.hvoid main(){int i,j,count0fo

3到1000之间的素数
[code=C/C++][/code]
#include<stdio.h>
#include<math.h>
void main()
{
  int i,j,count=0;
  for(i=3;i<=1000;i++)
  {
  for(j=2;j<=sqrt(i);j++)
{
if(i%j!=0)
{
  printf("%d ",i);
count++;
if(count%8==0)
{
printf("\n");
}

}
}
  }
}

请问各位我这个代码哪里错了啊?

[解决办法]

C/C++ code
for(j=2;j<=sqrt(i);j++)//不支持整形,只有double,float。造成重载不明确{if(i%j!=0){
[解决办法]
照着你的程序改了下,已经没问题了,代码如下~~
C/C++ code
#include<stdio.h>#include<math.h>int main(){    int i,j,count=0;    for(i=3;i<=1000;i++)    {        for(j=2;j<=sqrt(i);j++)        {            if(i%j==0)            {                break;            }        }        if(j > sqrt(i)){            printf("%d ",i);            count++;            if(count%8==0)            {                printf("\n");            }        }    }    return 0;}
[解决办法]
还是另写一个函数判断是否为素数吧,可以参考一下:
C/C++ code
#define TRUE 1#define FALSE 0#include<stdio.h>int is_prime(int x);int main(void) {    int i;    int count = 0;    for(i = 3; i < 1000; i++) {        if(is_prime(i)) {            printf("%5d ", i);            count++;            if(count %8 == 0) {                printf("\n");            }        }    }    printf("\n");    return 0;}int is_prime(int x) {    if(x < 2) {        return TRUE;    }    int factor;    for(factor = 2; factor*factor <= x; factor++) {        if(x%factor == 0) {            return FALSE;        }    }    return TRUE;}
[解决办法]
C/C++ code
#include<stdio.h>int main(void){    int n1,nm,i,j,flag,count=0;    do    {        printf("Input START and END=?");        scanf("%d%d",&n1,&nm);           /*输入求素数的范围*/    }    while(!(n1>0&&n1<nm));               /*输入正确的范围*/    printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);    if(n1==1||n1==2)                     /*处理素数2*/    {        printf("%4d",2);        n1=3;count++;    }    for(i=n1;i<=nm;i++)                 /*判定指定范围内的整数是否为素数*/    {        if(!(i%2))continue;        for(flag=1,j=3;flag&&j<i/2;j+=2)            /*判定能否被从3到整数的一半中的某一数所整除*/            if(!(i%j))flag=0;       /*若能整除则不是素数*/            if(flag) printf(++count%15?"%4d":"%4d\n",i);    }    return 0;}
[解决办法]
回去把这个程序编写一下。
[解决办法]
探讨
还是不知道怎么回事。。。我的到底错哪了额。。。

[解决办法]
C/C++ code
if(i%j==0)//可以判断它不是素数if(i%j!=0)//不一定可以判断它就是素数
[解决办法]
程序其实没有问题啦。。不过你第二层for 有点问题。打印出来数字应该判断下一个数字 就是要break一下。你没有break 导致 有些数内被若干个数整除 就打印了若干次。。 你代码加个break就好了:
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,count=0;
for(i=3;i<=1000;i++)
{
for(j=2;j<=sqrt(i);j++)
{
if(i%j!=0)
{
printf("%d ",i);
count++;


if(count%8==0)
{
printf("\n");
}
break;

}
}
}
}
[解决办法]

C/C++ code
#include<stdio.h>#include<math.h>int main(void){    int m,i,k,h=0,leap=1;    printf("\n");    for(m=3;m<=1000;m++)    {        k=sqrt(m+1);        for(i=2;i<=k;i++)            if(m%i==0)            {                leap=0;                break;            }            if(leap)            {                printf("%-4d",m);                h++;                if(h%10==0)                    printf("\n");            }            leap=1;    }    printf("\nThe total is %d",h);    return 0;}
[解决办法]
#include<iostream>
#include<cmath>
using namespace std;

void main()
{
int i,j,count=0;

for(i=3;i<=1000;i++)
{
bool prime=true;
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
prime=false;
break;
}
}

if (prime)
{
cout<<i<<' ';
count++;


if (count%8==0)
cout<<endl;
}
}
cout<<endl;
}

问题是逻辑上的 你的程序表明 只要一个数m不是从所有2到sqrt(m)的倍数 它就是素数

热点排行