关于100以内的素数。

hongchenfly 2006-11-03 10:47:51
刚起步学习C。就是有时间看一下的那种。
今天遇到了一个问题。
教程上的例子。
main()
{
int m,n,i,prime;
i=0;
for(m=2;m<=100;m++){
prime=1;
for(n=2;n<m;n++)
if(m%n==0)
prime=0;
if(prime){
printf("%6d",m);
i++;
if(i%5==0)
printf("\n");
}
}
if(i%5!=0)
printf("\n");
}
说实话,看得不是太明白。
我想能不能只定义2个变量,m和n。就能得到结果。
但是,我只能写道这样。
main()
{
int m,n;
for(m=2;m<=100;m++)
for(n=2;n<m;n++)
if(m%n!=0)
printf("%d",m);

下面我就写不出来了。
请大家帮我想想,只定义2个变量可以么/、?
如果可以,那下面该如何继续呢?
谢谢了。
...全文
267 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
doudouHuY 2006-11-03
  • 打赏
  • 举报
回复
如果是质数,不可能被任何比他小的数整除,导致二层循环执行到n=m的时候才退出。所以n==m的时候也就表明此数为质数,输出
hongchenfly 2006-11-03
  • 打赏
  • 举报
回复
谢谢楼上的。
前边的我看明白了,但是
if(n == m) {
printf("%4d", n);
}
这句是什么意思呢?
不是很懂,不好意思。
晨星 2006-11-03
  • 打赏
  • 举报
回复
#include <stdio.h>

main()
{
int m,n;
for(m = 2; m < 100; m++) {
for(n=2;n<m;n++)
if(m%n == 0)
break;
if(n == m) {
printf("%4d", n);
}
}
}
晨星 2006-11-03
  • 打赏
  • 举报
回复
可以,它那个在很大程度上是为了打印得漂亮一点,5个一行,如果你不要,至少可以去掉i,实际上,prime也可以去掉,而直接利用循环结束时n的值。
hongchenfly 2006-11-03
  • 打赏
  • 举报
回复
谢谢各位了
lxs5216 2006-11-03
  • 打赏
  • 举报
回复
我改到一下
#include <stdio.h>

int main(void)
{
int m,n;
for(m = 2; m < 100; m++) {
for(n=2;n<m/2;n++)
if(m%n == 0)
break;
if(n == m)
printf("%4d", n);
}
}
lxs5216 2006-11-03
  • 打赏
  • 举报
回复
steedhorse(晨星) 的程序很有特色呀!

我来说说他那两个循环的意思吧!说错了请纠正!

if(m%n == 0)
   break;
if(n == m)
printf("%4d", n);
因为素数是不能被比他小的数整除,所以第一个if就是来比较整除,如果m和n可以被整除就执行break,也就是退出最里面的那层for循环,这样就不会执行第二个if了,也就不会打印了,如果没有break就到了第二个if,这个if里是判断m是否为质数,如果是就打印了!

不过这个程序说实话还是不能忍受,计算量太大了!
hongchenfly 2006-11-03
  • 打赏
  • 举报
回复
还是不怎么明白,那位兄弟姐妹在来帮我解释一下,谢谢。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧