刚学C语言,求3~100之内的素数,不知道具体什么意思,各位大大能帮小弟解释么?谢谢了!!

#include
void main()
{
int n,m;
for(n=3;n<=100;n++)
{
if(n%m==0) break;
if(m>=n)
printf("%d\n",n);
}
}
m的值就当它有,是我少打了,能给小弟讲讲为什么这么写和他们所代表的意思么?

先来看一下素数是什么意思:
素数
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。
有的数,如果单凭印象去捉摸,是无法确定它到底是不是素数的。有些数则可以马上说出它不是素数。一个数,不管它有多大,只要它的个位数是2、4、5、6、8或0,就不可能是素数。此外,一个数的各位数字之和要是可以被3整除的话,它也不可能是素数。但如果它的个位数是1、3、7或9,而且它的各位数字之和不能被3整除,那么,它就可能是素数(但也可能不是素数)。没有任何现成的公式可以告诉你一个数到底是不是素数。你只能试试看能不能将这
个数表示为两个比它小的数的乘积。
找素数的一种方法是从2开始用“是则留下,不是则去掉”的方法把所有的数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000)。第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一个数删去一个数,这样就能把所有能被2整除、因而不是素数的数都去掉。在留下的最小的数当中,排在2后面的是3,这是第二个素数,因此应该把它留下,然后从它开始往后数,每隔两个数删去一个,这样就能把所有能被3整除的数全都去掉。下一个未去掉的数是5,然后往后每隔4个数删去一个,以除去所有能被5整除的数。再下一个数是7,往后每隔6个数删去一个;再下一个数是11,往后每隔10个数删一个;再下一个是13,往后每隔12个数删一个。……就这样依法做下去。
你也许会认为,照这样删下去,随着删去的数越来越多,最后将会出现这样的情况;某一个数后面的数会统统被删去崮此在某一个最大的素数后面,再也不会有素数了。但是实际上,这样的情况是不会出现的。不管你取的数是多大,百万也好,万万也好,总还会有没有被删去的、比它大的素数。
事实上,早在公元前300年,希腊数学家欧几里得就已证明过,不论你取的数是多大,肯定还会有比它大的素数,假设你取出前6个素数,并把它们乘在一起:2*3*5*7*11*13=30030,然后再加上1,得30031。这个数不能被2、3、5、7、11、13整除,因为除的结果,每次都会余1。如果30031除了自己以外不能被任何数整除,它就是素数。如果能被其它数整除,那么30031所分解成的几个数,一定都大于13。事实上,30031=59*509。
对于前一百个、前一亿个或前任意多个素数,都可以这样做。如果算出了它们的乘积后再加上1,那么,所得的数或者是一个素数,或者是比所列出的素数还要大的几个素数的乘积。不论所取的数有多大,总有比它大的素数,因此,素
数的数目是无限的。
随着数的增大,我们会一次又一次地遇到两个都是素数的相邻奇数对,如5,7;11,13;17,19;29,31;41,43;等等。就数学家所能及的数来说,它们总是能找到这样的素数对。这样的素数对到底是不是有无限个呢?谁也不知道。数学家认为是无限的,但他们从来没能证明它。这就是数学家为什么对素数感兴趣的原因。素数为数学家提供了一些看起来很容易、但事实却非常难以解决的问题,他们目前还没能对付这个挑战哩。
#############################################

现在再来看这段C++代码:
#include
void main() 主函数
{
int n,m; 定义n和m两个整数;
for(n=3;n<=100;n++) 循环计算3-100之内的素数
{
if(n%m==0) break;如果 n==3它不是素数就接着计算4是不是素数
if(m>=n) m没赋值(m = ?)出错
printf("%d\n",n); 输出计算结果!
}
}
现在看出m没有值,所以这段代码肯定错误!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-18
这个有两个算法
一个是每个数都判断,这个运行时效长一点,
一个是去除法,也就是把能整出2~7的都去除,所剩下的就是2~100内的素数了

解释一下,为什么是2~7。100以内,判断100是否是素数的时候,结束条件是根号100以内(也就是10)就可以。可以参考素数的求法
挑出能整出2~10的就可以了,因为2,3,4,5,6,7,8,9,10,折是个数4 6 8 9 10折几个数在前面都可以删除掉,其实只判断是否整出2 3 5 7折几个就可以了

第一个方式
int i,m;
int a[50],t=0;
for(i=0;i<=100;i++)
{
for(m=2;m*m<=i;m++)
if(i%m==0)
break;
if(m*m>i)
a[t++]=i;
}
最后算出a中有t个数,是素数

第二种
int a[100];
int i,j;
for(i=0;i<100;i++)
a[i]=i+1;
a[0]=0; //1不是素数
for(i=2;i<=7;i++)
for(j=i;j<100;j++)
if(a[j]%i==0)
a[j]=0; //这样,把不是零的打印出来就可以了
for(i=1;i<100;i++)
if(a[i]!=0)
printf("%6d",a[i]);本回答被提问者和网友采纳
第2个回答  2012-03-16
int n,m;
for (n = 3;n<=100; n++)
{
for(m = 2;m<n; m++)
{
if(n%m == 0)
{
break;
}
}
if(m >= n)
{
printf("%d\t",n);
}
}

要的是这个吗?
第3个回答  2012-03-16
程序有问题···m的值没给··
素数就是质数··除了1和它本身··能整除··如 2 3 5 7 11 13 17。。。。。。

有什么不明白追问···谢谢··
相似回答