将100到200之间的素数输出 C语言程序

我写的程序如下,但是运行发现无法实现循环。求教怎么改动?
=======================================
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
n=100;
do
{ i=2;
while(i<=sqrt(n))
{if(n%i==0)
i=n;
else
i=i+1;
}
if(i<sqrt(n))
{
printf("%d",n);
}
n=n+1;
}while(n>200);
return 0;
}
我知道这个程一开始就有问题。只是我想问个究竟。为什么这样不可以?

代码如下:

#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个回答  推荐于2017-11-23
思路:1,从2开始到n-1一个一个除
2,从2开始一直除到n/2
3.从2开始除到开方
以下是第3种思路,且没用函数

#include<stdio.h>
#include<math.h>
void main()
{
int n,i,m,k;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;1++)
if (m%i==0)
break;
if (i>=k+1)
{
printf("%d",m);
n=n+1;
}
if (n%10==0)
printf("\n");
}
printf("\n");
}本回答被提问者和网友采纳
第2个回答  2019-06-29
思路:1,从2开始到n-1一个一个除
2,从2开始一直除到n/2
3.从2开始除到开方
以下是第3种思路,且没用函数
#include<stdio.h>
#include<math.h>
void
main()
{
int
n,i,m,k;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;1++)
if
(m%i==0)
break;
if
(i>=k+1)
{
printf("%d",m);
n=n+1;
}
if
(n%10==0)
printf("\n");
}
printf("\n");
}
第3个回答  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 的输出截图,可以说是很规整了!

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

第4个回答  2010-11-06
又是素数 貌似刚开始学程序都是素数
这个程序一开始就有问题