[循环]素数(c语言)

[循环]素数

原题

原题在这里插入图片描述

思路解析:

	素数是除了1和其本身外无其他约数的数。
	二重循环:外循环:用i表示区间[m,n]上的数
					  内循环:用j判断i是否为素数

AC代码:

方法一:在循环内赋初值的标志旗帜法

#include <stdio.h>
int main()
{
    int m,n,i,j;
    int flag;                  //用旗帜代表是不是素数
    scanf("%d%d",&m,&n);
    for(i=m;i<=n;i++)          //外循环控制表示i是区间[m,n]上的数
    {
        flag=1;                //用1首先认为是素数 注意:flag=1要放在循环中,而不是放在循环外,如果放到循环外,内循环一次后,flag=0,             再到外循环flag就一直为0了。flag=1也是为了配合下面
        for(j=2;j<i;j++)       //看i除了1和其本身外还有无其它约数
            if(i%j==0)          //说明j是i的约数,i不是素数
            {
                flag=0;
                break;         //不加break也可以。不加会多循环判断几次,增加运行时间
            }
        if(flag==1)
            printf("%d ",i);    //注意输出格式要与题目相对应
    }
    return 0;
}

方法二:在循环外赋初值的标志旗帜法

#include <stdio.h>
int main()
{
    int m,n,i,j;
    int flag=1;                      //此时的旗帜在循环外
    scanf("%d%d",&m,&n);
    for(i=m;i<=n;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                flag=0;
                break;
            }
            else                      //否则flag=1代表是素数
                flag=1;
            
        }
        if(flag)                       //即flag==1
            printf("%d ",i);
    }
    return 0;
}

方法三:无旗帜标志

#include <stdio.h>
int main()
{
    int m,n,i,j;
    scanf("%d%d",&m,&n);
    for(i=m;i<=n;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
             break;
        }
        if(j==i)                 //说明i的约数为其本身,即i为素数
            printf("%d ",i);
    }
    return 0;
}

发布了17 篇原创文章 · 获赞 15 · 访问量 551

猜你喜欢

转载自blog.csdn.net/qq_46009744/article/details/103649945
今日推荐