java问题,判断101到200之间的质数并且打印出来_百度知道找好工作,快人一步问题二十:101-200之间有多少个素数,并输出所有素数。
/***************************************************************&&&&&&&&&&&&&&&&&&
*****auther: liuyongahui
*******date:
***language: C&&&&&&&&&&&&&
&***************************************************************/
&&&& 问题二十:101-200之间有多少个素数,并输出所有素数。
#include &stdio.h&
int main()
&&&&&& //做标记
&&&& int num=0;&& //计数
&&&& int a[100];&& //存储素数
&&&& for(i=101; i&200; i++)
&&&&&&&& flag=1;
&&&&&&&& for(j=2; j&=i/2; j++)& //i除与2-i/2的数来验证是否为素数
&&&&&&&& {&&
&&&&&&&&&&&& if(i%j==0) //若能被整出,不是素数
&&&&&&&&&&&& {
&&&&&&&&&&&&&&& flag=0;&&&
&&&&&&&&&&&& }
&&&&&&&& }
&&&&&&&& if(flag)
&&&&&&&& {
&&&&&&&&&&& a[num++]=i;
&&&&&&&& }
&&&& printf(&有%d个素数,它们分别是:\n&, num);
&&&& for(i=0; i& i++)
&&&&&&&& printf(&%d\n&, a[i]);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'> 判断101-200之间有多少个素数,并输出所有素数。哪位高手能帮忙详细的解释下这个程序
判断101-200之间有多少个素数,并输出所有素数。哪位高手能帮忙详细的解释下这个程序
liwg6666 & &
发布时间: & &
浏览:27 & &
回复:9 & &
悬赏:0.0希赛币
判断101-200之间有多少个素数,并输出所有素数。谁能帮忙详细的解释下这个程序判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码:#include &math.h&main(){ int m,i,k,h=0,leap=1; printf(&\n&); for(m=101;m&=200;m++) { k=sqrt(m+1); for(i=2;i&=k;i++) if(m%i==0) {leap=0;} if(leap) {printf(&%-4d&,m);h++; if(h%10==0) printf(&\n&); } leap=1; } printf(&\nThe total is %d&,h);}leap这个变量有什么用红色的这一段是什么意思
就是为了看
这个是否成立。。这是很简单的if语句啊,大哥刚开始 leap = 1;
leap = 0; 了
之后break就跳出了哪个if语句很明显,接下来的
是错的,也就{
printf(&%-4d&,m);
h++; if(h%10==0) printf(&\n&); }这里面的东西不执行了。。接下来又是
,其他的自己看吧
liwl5269 & &
13:04:52 & &
& & (0)(0)为了提高效率for(m=101;m&=200;m++)最好改成for (m = 101; m &= 200; m += 2)因为偶数肯定不是素数,所以
m += 2 可以剔除偶数其他的我就没多看,也就不知道怎么能更好的提高效率
liwnew & &
13:04:52 & &
& & (0)(0)for (m = 101; m &= 200; m += 2)改成for (m = 101; m & 200; m += 2)200肯定不是素数,就直接不用
liwoqianxiao & &
13:04:52 & &
& & (0)(0)为什么用sqrt(m)是因为,如果m是一个合数,那么它的所有因子都小于等于sqrt(m).所以你判断2到sqrt(m)次就够了,不用判断那么多次。
liwnew & &
13:04:52 & &
& & (0)(0)leap就相当于一个标志可以设置成bool类型。如果是0则不用判断了,直接跳出循环。可是在你这里貌似可以不用这个标志位..这个变量属于多余
liws2006 & &
13:04:52 & &
& & (0)(0)程序第4行为leap付初值leap=1(逻辑上的真)为下面的使用做准备下面看红色部分: if(m%i==0)
//如果m能被i整除就把leap的值置为0,然后跳出
for(i=2;i&=k;i++)这个循环 {leap=0;} if(leap) {printf(&%-4d&,m);h++;
//如果leap此时的值已经改变为0词语与逻辑为假直接跳过。如果此时leap的值为初始值1,则执行下面的语句块,输出m的值。h++的左右是计数(计算输出的素数的个数为下面的语句做准备) if(h%10==0)
//如果h的值累积到能够被10整除的时候就输出换行,这样 做的好处是不会是输出的数据都堆在一行,而是没输出10个数据就自动换行。 printf(&\n&); } leap=1; }
//在执行下一次for(m=101;m&=200;m++)循环时把leap的值有置为1,如此循环知道m的值大于200结束。最后统计输出100-200间素数的个数。希望可以帮到你
liwl5269 & &
13:04:52 & &
& & (0)(0)leap是判断m能不能被I整除的,如果整除,直接break进行下一次循环,否则,继续判断2到sqrt(这个数),如果一直不能整除得到一个解,每break一次,leap重置为1;
liworld14620 & &
13:04:52 & &
& & (0)(0) C/C++ code { k=sqrt(m+1);
// 从2开始,到一个数的平方根为止
for(i=2;i&=k;i++)
if(m%i==0)
{leap=0;}
// 如果此数能被上述范围之数整除,则不是素数,
// 将标志位 leap 复位,退出
if(leap) {printf(&%-4d&,m);h++; // 如果是素数,标志位 leap == 1, 左对齐,4位宽
if(h%10==0)
// 每10个数字一行打印输出
printf(&\n&);
}
leap=1; }
liwoqianxiao & &
13:04:52 & &
& & (0)(0)这个题做的不对吧liwsy & &
13:04:52 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}