C语言Oj题判断素数几种方式详解

前言

各位少年:少年们好,我是博主那一脸阳光,上期给大家分享了for循环的使用和break还有continue的使用方法,大家已经明白了语法的使用,我们就要融会贯通它,我们来刷一道OJ题。好,我们先做一些小型的代码把他引到出来。

 题目:输入一个数判断它是不是素数,并且不是的情况把它打印出来不是素数。

 首先,我们得知道素数是什么?素数就是除了它本身和1以外的数,都整除不了的数,0不是素数。

 数学例子:11除10 除不开 除9也除不开,至到除到1才可以除开,所以说11是素数。 

那么很显然这里需要用到循环,和选择分支语句。首先循环的条件是什么?首先我们定义一个变量i :i不能是1,因为素数只能被它本身和1相除,所以i是2 限制条件呢?那自然就是i-1了

 那怎么实现相除部分呢?很显然聪明的肯定了想到 如果变量i%j余于1那就是素数,否则就不是素数。好,我们把代码写出来,对了,重点0不是素数 

#include
int main()
{
    int i = 0;
    scanf("%d", &i);
    int j = 2;
    for (j = 2; j <= i-1; j++)
    {
        if (i % j==0)
        {
            printf("不是素数");
            break;
        }

    }
    if (i % j == 1)
    {
        printf("是素数\n");
    }
   
    if (i == 0)
    {
        printf("0不是素数");
     }
    return 0;
}

很显然这个代码实现了,这个代码,完整实现了,但繁琐了很显然我们再写一次,再把代码简化一下。,我们把素数打印出来,把100到的素数都打印出来。

#include
int main()
{

int i=0;
int count=0;
for(i=100;i<=200;i++);
{
int flag=1;
int j-0;
for(j=2;j<=i-1;j++)
{
if(i%j==0)
    {
   flag=0;
    break;
   }
}
 if(flag==1)
  {
  printf("%d",i);
   count++;
  }
}
printf("\ncount=%d\n",count);
return 0;
}

很显然这个代码还是不够简便,时间复杂度的非常高,时间复杂度大家可以理解为执行的时间,我们怎么解决这个问题呢?我们介绍个库函数。sqrt开平方。

#include
int main()
{

int i=0;
int count=0;
for(i=101;i<=200;i+=2);
{
int flag=1;
int j-0;
for(j=2;j<=i-1;j++)
{
if(i%j==0)
    {
   flag=0;
    break;
   }
}
 if(flag==1)
  {
  printf("%d",i);
   count++;
  }
}
printf("\ncount=%d\n",count);
return 0;
}

我们先来渐渐应道出来你们,我们找到个素数每次加2,它还是素数不能被整除。好我们再优化一下,我们思考一下

16能写成 2*8 4*4
=a*b
a和b中至少有一个数字《=
#include
int main()
{

int i=0;
int count=0;
for(i=101;i<=200;i+=2);
{
int flag=1;
int j-0;
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
    {
   flag=0;
    break;
   }
}
 if(flag==1)
  {
  printf("%d",i);
   count++;
  }
}
printf("\ncount=%d\n",count);
return 0;
}

你可能感兴趣的:(c语言,开发语言)