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)的倍数 它就是素数