[求助]求100到500间的所有素数。
求100到500间的所有素数:#include <stdio.h>
main()
{
int m,k,i,n=0;
printf("\n");
for(m=101;m<500;m+=10)
{
for(i=2;i<=m/2;i++)
if(m%i==0) break;
if(i>=m/2+1)
{
printf("%d ",m);
n++;
if(n%10==0) printf("\n");
}
}
return 0;
}
请问下
for(i=2;i<=m/2;i++)
if(m%i==0) break;
if(i>=m/2+1)
{
printf("%d ",m);
n++;
if(n%10==0) printf("\n");
}
是什么意思啊?那个FOR循环好象没有什么用的样子?
它起什么作用?还有下面的IF语句有什么作用?麻烦那位来给讲解下,多谢谢了先。
搜索更多相关的解决方案:
素数
----------------解决方案--------------------------------------------------------
for循环怎么会没有用呢 i 从2 循环到 m/2 在此过程中 如果 m整除 i 即 m不为素数 直接跳出循环
只有在不跳出循环的情况下 i才可能大于等于m/2+1 (我想这里用m/2会不会好点呢)
所以被打印出来的数就会是一个素数
----------------解决方案--------------------------------------------------------
我想问下~这里的:
if(i>=m/2+1)
是什么意思啊?
理解不了~
为什么是“>”呢?
----------------解决方案--------------------------------------------------------
感谢2楼,终于得以明白,哎~我太笨了
----------------解决方案--------------------------------------------------------
3楼的问题我回答啦
那个IF是用来输出是换行用的 没有别的意思
----------------解决方案--------------------------------------------------------
第一个 if (i>=m/2+1) 起修正作用, 因为如果这个数是奇数的话,m/2会比它的一半小.
第二个 if 用来换行,即满10个数换行.
----------------解决方案--------------------------------------------------------
因为判断素数可以只判断到他的一半.就可以知道他是不是素数了。如100.最多是当你判断到50就知道了。因为判断到51的时候已经无意义了。(100/51=1).....其实他的素数求法不太好。最好是来个漏选法或者只判断到他 sqrt(m) 就已经可以了。你可以去看看c论坛里有篇经典文章。名字是 <<程序设计方法及编写优质无错C程序秘诀 >> 这篇文章里有写求素数的算法.而且作业写的非常好。我吐血推荐~~~~~~~~~~~
----------------解决方案--------------------------------------------------------
素数“漏筛法” #include<stdio.h> #define max 22500 main() { unsigned int i,range ,factor ,k; int a[max]; printf("please input the range:\n");/*指出多大范围内寻找素数*/ scanf("%d",&range); for(i=2;i<=range;i++) /*初始化*/ a[i]=1; factor=2; while(factor<=range) { if(a[factor]<=range) { printf("%d\t",factor); k=factor; while(k<=range) { a[k]=-1; k=k+factor; } } factor++; } } 坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!-----激情依旧
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"math.h"
main()
{
int k,j,i,n=0,nq,ne;
printf("请输入启始值:");
scanf("%d",&nq);
printf("\n请输入终止值:");
scanf("%d",&ne);
for(i=nq;i<=ne;i++)
{ k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)break;
if(j>=k+1) {printf("%7d",i); n=n+1;
if(n%10==0) printf("\n");}
}
printf("\n");
}
----------------解决方案--------------------------------------------------------