首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

将小于N的全部个位不等于9的素数在屏幕打印出来

2013-07-11 
将小于N的所有个位不等于9的素数在屏幕打印出来。求助! for(i2ini++) {for(j2jij++){if(i%j0||i%

将小于N的所有个位不等于9的素数在屏幕打印出来。
求助!
 for(i=2;i<n;i++)
 {
  for(j=2;j<i;j++)
  {
  if(i%j==0||i%10==9)
    break;
  else
  continue;
  }
 num++;
 if(num<=10)
 printf("%3d",i);
 else
 {
 printf("\n");
 num=1;
 printf("%d",i);
 }
 }
主要想法是让不满足条件的数直接++进入下一轮是否是素数的判定,满足的才打印出来;我不知道在标红的地方怎么处理,才可以满足是素数的输出,否则进行判断下一个小于N的数是否是素数的判定?
谢谢各位!谢谢
[解决办法]


 for(i=2;i<n;i++)
 {
  for(j=2;j<i;j++)
  {
  if(i%j==0
[解决办法]
i%10==9)
    break;
  else
  continue;
  }
if(i==j){  //判断该数字是否是素数
 num++;
 if(num<=10)
 printf("%3d",i);
 else
 {
 printf("\n");
 num=1;
 printf("%d",i);
  }
  }
 }

[解决办法]
for(i=2; i<n; i++)
{
    if( i % 10 != 9)
    //把个位数的判断放在这里更合适
    //这样更容易理解,而且减少了除法次数
    {
        int is_prime = 1;
        //虽然结束后可以用j == i来判断是否是素数
        //但用一个带有合适名字的标志变量更好理解
        //在循环中使用标志变量不一定会降低可读性,这里反而提高了可读性
        for(j=2; is_prime && j<i; j++)
        {
            is_prime = ( i % j != 0 );
            //如果觉得上一句不好理解
            //也可以写成下面的形式
            //if (i%j==0)


            //{
            //    is_prime = 0;
            //}
        }
        if (is_prime)//如果i是素数
        {
            num++;
            if(num<=10)
                printf("%3d",i);
            else
            {
                printf("\n");
                num=1;
                printf("%d",i);
            }
        }
    }
}

热点排行