100~200之间的素数(及其四个优化方案)

要求素数,首先我们要知道什么是素数,在解题的时候,不要急着去寻找方法解题,而是要先了解它的根本,才可以在遇到类似题的时候轻松面对解决

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。

程序如下:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int i;

for (i = 100; i <= 200; i++)   //也可自行设定数值范围

{

int j = 0;

for (j = 2; j <= i - 1; j++)

{

if (i%j == 0)

{

break;

}          //如果i%j=0说明i可以整除j,则跳出if语句

}

if (i == j)

{

printf("%d  ", i);

}

}

system("pause");

return 0;

}

结果如下:

优化方案一:

int main()

{

int i;

for (i = 101; i <= 200; i+=2)  //由于100不是素数,所以可以从101开始

{

int j = 0;

for (j = 2; j <= i - 1; j++)

{

if (i%j == 0)

{

break;

}          //如果i%j=0说明i可以整除j,则跳出if语句

}

if (i == j)

{

printf("%d  ", i);

}

}

system("pause");

return 0;

}

优化方案二:

int main()

{

int i;

for (i = 101; i <= 200; i+=2)  //由于100不是素数,所以可以从101开始

{

int j = 0;

for (j = 3; j <= i - 1; j++)

{

if (i%j == 0)

{

break;

}          //如果i%j=0说明i可以整除j,则跳出if语句

}

if (i == j)

{

printf("%d  ", i);

}

}

system("pause");

return 0;

}

优化方案三:

int main()

{

int i;

for (i = 101; i <= 200; i+=2)  //由于100不是素数,所以可以从101开始

{

int j = 0;

for (j = 3; j <= i - 1; j+=2)

{

if (i%j == 0)

{

break;

}          //如果i%j=0说明i可以整除j,则跳出if语句

}

if (i == j)

{

printf("%d  ", i);

}

}

system("pause");

return 0;

}

优化方案四:

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

int i;

for (i = 101; i <= 200; i+=2)   //由于100不是素数,所以可以从101开始

{

int j = 0;

for (j = 3; j <= sqrt(i); j+=2)

{

if (i%j == 0)

{

break;

}          //如果i%j=0说明i可以整除j,则跳出if语句

}

if (j>sqrt(i))

{

printf("%d  ", i);

}

}

system("pause");

return 0;

}

写程序最原始的目的可能是解决某个题或者某个实际问题,但是,当以后我们进入社会,你要解决的就全部都是实际问题,那时候你面对的可能不仅仅只是解决它,而是要不断的优化它,要让成本更低,时间更短,效率更高,而这种优化解决问题的思路,要从写小程序开始培养。

时间: 2024-08-27 20:20:56

100~200之间的素数(及其四个优化方案)的相关文章

c语言打印100~200之间的素数

素数即就是该数除了1和它本身以外不再有其他的因数,否则称为合数. 找寻100~200之间的素数的算法:让a被2~√a除,若a不能被整除,则a是素数. #include<stdio.h> #include<math.h> int main() {    int a,k,i;//数a     printf("100~200以内的prime\n");      for (a=101;a<=200;a=a+2)   {  k= sqrt(a);    for (i

C语言打印100—200之间的素数

质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.  根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积:而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的.最小的质数是2. 目前为止,人们未找到一个公式可求出所有质数. C语言代码如下:     # include <stdio.h> int main()   

【c语言】将100~200之间的素数输出

// 将100~200之间的素数输出 #include <stdio.h> #include <math.h> int main() { int i,j; printf("100~200之间的素数如下:\n"); for(i = 101; i <= 199; i++ ) { for( j = 2; j <= sqrt(i); j++ ) { if( i % j == 0 ) break; } if( sqrt(i) < j ) printf(&

打印100~200 之间的素数

编写思想:对100到200之间的数依次进行for循环判断,看其是否为素数.判断方法:对于一个自然数,除了1以外,不是素数就是合数.若该数字是素数,则不能被除了1和它自身以外的数整除:而一个数如果是合数,则它的所有因子不会大于对其开根号所得出的数,由此可得出每个数最多时候的循环次数. 初次生成的源代码如下: #include<stdio.h> #include<math.h> int main() { int primer,variabe,sign; for(primer=101;p

java实现查找100~200之间的素数

1 package com.company; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // write your code here 7 System.out.println("helloworld"); 8 int i; 9 int j; 10 for (i=100;i<=200;i++){ //循环i=100~200 11 for (j=2;j<i;j++){ //循环

用c语言编写打印出100~200 之间的素数。

运行代码: #include<stdio.h> #include<math.h> int main() { int a; int b; int n=0; for (a=100;a<=200;a++) { for (b=2;b<=a-1;b++) { if (a%b==0) break;    //若a能整除b,则执行break操作,即不执行下面的if操作返回                           //     上面的那个for循环. if (b==a-1)

C语言打印100 ——200之间的素数

根据素数定义,只能被1和它本身整除的自然数为素数.利用定义可以循环判断该数除以比它小的每一个自然数(不包括1),如果都不能整除,则这个数就是素数. 由于上述方法效率太低,对此方法进行优化.我们都知道偶数一定不是素数,那只求剩余一般的数.如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根,由合数定理可进一步优化,只需要循环判断该数除以比它的平方根小的每一个自然数(大于1)即可. C语言代码如下: #include<stdio.h> #include<math.h> int m

【C语言】求100~200之间的素数

分析: 判断一个正整数m是否为素数有多种方法. 方法1:让m依次被2,3,-,m-1除,如果m不能被2-m-1中的任何一个整数整除,则m是素数. 方法2:让m依次被2,3,-,m/2除,如果m不能被2-m/2中的任何一个整数整除,则m是素数. 方法3:让m依次被2,3,-,sqrt(m)除,如果m不能被2-sqrt(m)中的任意一个整数整除,则m为素数.sqrt(m)为m的平方根. 其中最后一种方法判断速度最快,因此这里采用最后一种方法. #include <stdio.h> #include

C语言实现打印100~200 之间的素数

#include "stdio.h"#include "math.h"void main(){ int m,i, k;         for(m=101; m<=200; m+=2)         { k=sqrt(m);         for (i=2;i<=k;i++)         if (m%i==0) break;         if(i>k)        { printf("%6d",m);