前言
各位少年:少年们好,我是博主那一脸阳光,上期给大家分享了for循环的使用和break还有continue的使用方法,大家已经明白了语法的使用,我们就要融会贯通它,我们来刷一道OJ题。好,我们先做一些小型的代码把他引到出来。
题目:输入一个数判断它是不是素数,并且不是的情况把它打印出来不是素数。
首先,我们得知道素数是什么?素数就是除了它本身和1以外的数,都整除不了的数,0不是素数。
数学例子:11除10 除不开 除9也除不开,至到除到1才可以除开,所以说11是素数。
那么很显然这里需要用到循环,和选择分支语句。首先循环的条件是什么?首先我们定义一个变量i :i不能是1,因为素数只能被它本身和1相除,所以i是2 限制条件呢?那自然就是i-1了
那怎么实现相除部分呢?很显然聪明的肯定了想到 如果变量i%j余于1那就是素数,否则就不是素数。好,我们把代码写出来,对了,重点0不是素数
1.#include<stdio.h> 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<stdio.h> 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; }1.
很显然这个代码还是不够简便,时间复杂度的非常高,时间复杂度大家可以理解为执行的时间,我们怎么解决这个问题呢?我们介绍个库函数。sqrt开平方。
#include<stdio.h> 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; }1.
我们先来渐渐应道出来你们,我们找到个素数每次加2,它还是素数不能被整除。好我们再优化一下,我们思考一下
16能写成 2*8 4*4 =a*b a和b中至少有一个数字《=1.
#include<stdio.h>
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;
}