C语言:将100~200之间的素数输出

如题所述

逻辑错误,准确位置为14行,正确代码如下:
#include<stdio.h>
int main()
{
int i = 0;
for (i=100; i<=200; i++)
{
int j = 0;
for (j=2; j<=i-1; j++)
{
if (i%j == 0)
{
break;
}
}
if (j>=i)
{
printf("%d",i);
}
}
return 0;
}

扩展资料:

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。

质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设N=p1×p2×……×pn,那么,

是素数或者不是素数。

如果

为素数,则

要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。

    如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。

    其他数学家给出了一些不同的证明。欧拉利用黎曼函数证明了全部素数的倒数之和是发散的,恩斯特·库默的证明更为简洁,哈里·弗斯滕伯格则用拓扑学加以证明。



温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-22
#include "stdio.h"
#include "math.h"
main()
{
int i,j;
printf("100~200所有的素数为:\n");
for(i=100;i<200;i++)
{
for(j=2;j<=sqrt(i);j++)
if(i%j==0)
break;
if(j>sqrt(i))
printf("%d ",i);
}
}
第2个回答  2011-09-22
#include <stdio.h>
#include <math.h>
int ss(int n) /*检查n是否为素数,如果是则返回1,否则返回0*/
{
int i;
for (i=2; i<=(int)sqrt((double)n); i++)
if (n%i==0) return 0;
return 1;
}
int main(void)
{
int i,j=0;
for (i=100; i<=200; i++)
if(ss(i))
{
j++;
printf("%5d",i);
if (j%5==0) printf("\n");
}
// printf("\ntotal prime=%d\n",j);
return 0;
}本回答被提问者采纳
第3个回答  2011-09-22
筛选法:用100-200之间的各个数除以2-200之间的整数,如果存在被整出的情况就把这个数字 置零,最后100到200之间非零的数字就是素数

代码如下

#include "stdio.h"
main()
{
int i,j;
int a[201];
for(i=2;i<=200;i++)
{
a[i]=i;
}
for(i=2;i<=100;i++)
{
if(a[i]!=0)
{for(j=100;j<=200;j++)
{
if(a[j]%a[i]==0)a[j]=0;
}
}
}
for(i=100;i<=200;i++)
if(a[i]!=0)
{
printf("%4d",a[i]);
if((i)%10==0)printf("\n");
}
}
第4个回答  2011-09-22
#include<stdio.h>
#include<math.h>
void main()
{ int m,k,i,n=0;
for(m=100;m<=200;m++)
{ k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
{printf("%d",m);
n=n+1;
}
}
printf("\n");
}