c语言输出100到200之间的素数

#include<stdio.h>
int main()
{ int i=100,n=2;
{for(i;i<=200;i++)
{for(n;n<i;n++)
{if(i%n==0)
break;
}
if(i%n==0) printf("%d\n",i);
}
}
return 0;
}
我要求100到200之间的素数 为什么这个函数不行

解题思路:

首先先找出来100~200以内的所有整数,再让这些整数对除了1和它本身以外的数求余,如果有能整除的就不是素数,否则就为素数。

先找出来100到200的所有整数,都为i

用i去对除了1和它本身以外的数求余。

正确的代码:

#include<stdio.h>

int main()

{

int conut = 0;

int i = 0;

for(i=100; i<=200; i++)   

{

int j = 0;

for(j=2; j<i; j++) 

{

if(i%j == 0)

break;

}

if(j==i)

{

conut++;

printf("%d ", i);

}

}

printf("\n");

printf("素数个数为:%d\n", conut);

return 0;

}

第二个if语句的判断条件应该是j==i;而不是i%j 。

扩展资料:

实现的其他方法:

需要用到sort函数,也就是开平方根函数。头文件为#include<math.h>。 显而易见,任何一个数,每一对因子都是由这个数开平方后的数的左右各一个组成,所以,在求余过程中,只需要对从2到开平方之后的数求余即可。遇到可以整除的就不是素数,否则就为素数。

代码:

#include<stdio.h>

#include<math.h>

int main()

{

int count = 0;

int i = 0;

for(i=100; i<=200; i++)

{

int j = 0;

for(j=2; j<=sqrt(i); j++)

{

if(i%j == 0)

break;

}

if(j > sqrt(i))

{

count++;

printf("%d ",i);

}

}

printf("\n");

printf("素数个数为:%d", count);

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-11

应该是对素数的定义没有理解吧。

素数,是定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

简而言之,素数就是只能被1和它自己相乘得到的数。所以,除了1和它自己之外,它对其它数取余数,结果都不是0。

同时,无论什么数,除了它自己之外,最大的因数肯定是它的一半,所以只需要查找到它的一半就可以了,不必从1查找到它自己。而且,这里是找素数,如果它的因数包括它自己的一半与数字2的话,那它也不会是素数了,所以查找的界限定为比如 i/2 是不会有遗漏的。

至于你的原来的代码里为什么是它自己开平方,我数学记得不多了,不是太清楚。

然后,就是根据定义去判断一个数是不是素数,那么,就必须让它与从2到它的一半的所有的数的余数都不为0,反应到代码里就是不仅仅要 「i % n != 0」,而且还要全部能除的数都除一遍,也就是「 n == k」,这个时候,才能确定这个数是素数了。

#include <stdio.h>
#include <math.h>

int main()
{
        int i, k, n, m = 0;
        for (i = 101; i <= 200; i = i + 2)
        {
                k = i / 2;  //  被除的数,小于等于它的一半
                for (n = 2; n <= k; n++)
                {
                        if (i % n == 0)
                                break;
                        else if (n == k)  // 要把从2到k的数都除一遍才能确定
                        {
                                printf("%8d", i);
                                m++;
                                if (0 == m % 10)  //把这个if输出换行放到else if里面来,要不然后面会多很多空行
                                        printf("\n");
                        }
                }
        }
        printf("\n");
        return 0;
}

输出截图:

还有一张是把 i 的初始值改为 3 的输出截图,可以说是很规整了!

如有帮助,烦请点采纳,谢谢!

第2个回答  推荐于2017-09-02

#include<stdio.h>

#include<math.h>

int main()

{ int i=100,n,k;

 {for(i;i<=200;i++)

{k=sqrt(i);

     for(n=2;n<=k;n++)

{if(i%n==0)

      break;

}

    if(n>k) printf("%d\t",i);

  }

 }

 printf("\n");

 getch();

 return 0; 

}  

追问

#include
int main()
{ int i=100,n=2;
{for(i;i<=200;i++)
{for(n;n<i;n++)
{if(i%n==0)
break;
}
if(n==i) printf("%d\n",n);
}
}
return 0;
}
这个函数请看一下 也不行 是哪里错了???

追答

这样就可以了:
#include
int main()
{ int i=100,n;
{for(i;i<=200;i++)
{for(n=2;n<i;n++)
{if(i%n==0)
break;
}
if(n==i) printf("%d\t",n);
}
}
return 0;

}

追问

为什么我一开始赋值给n就不行呢 要后来才赋

本回答被提问者和网友采纳
第3个回答  2019-01-27

逻辑错误,准确位置为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整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。

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



第4个回答  2008-10-03
首先了解什么是素数,
素数只能被 1 和它本身所能整出呃数
既然你是求100——200之间的素数
首先做一个for循环,是从100——200的(i=100;i<=200;i++)
在做一个内循环,是从2到外循环的数,然后判断能否呗整出
(j=2;j<i;j++)
思路是这样的 我给你写一下程序
main()
{
int i,j;
for(i=100;i<=200;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(i==j)
printf("%d\n",i);
}
}
过程基本就这样,你可以根据3楼的改编一下,
他的过程更简单,这就需要更加理解这个东西的本质了