C语言编程输出100到200的素数的两种方法,和三步优化(逐步优化)

了解素数(只能被自己和1整除的数)概念后,写代码会容易很多

<1>
这个版本的程序没有经过优化,是根据最基本的概念写出的代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i, m;
    for (i = 100; i <= 200; i++)
    {
        for (m = 2; m <= i; m++)
        {
            if (i == m)//输出条件
                printf("%4d", i);
            if (i%m == 0)//若是被除自己外的数整除则跳出
                break;
        }
    }
    system("pause");
    return 0;
}

<2>
做了基础优化的代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i, m;
    for (i = 100; i <= 200; i++)
    {
        for (m = 2; m <= sqrt(i); m++)
        {

            if (i%m == 0)
                break;
        }
        if (m >sqrt(i))//使用开平方函数,优化运行次数
            printf("%4d", i);
    }
    system("pause");
    return 0;
}

<3>
另一种方法,并没有优化

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i, m,sum;//定义计数器
    for (i = 100; i <= 200; i++)
    {
        sum = 0;//每次循环清零
        for (m = 2; m <= sqrt(i); m++)
        {

            if (i%m == 0)
                sum++;//不满足条件累加器加一
        }
        if (sum==0)
            printf("%4d", i);
    }
    system("pause");
    return 0;
}

<4>
经过最终优化的程序,在使用开平方函数的前提下,去掉循环中的偶数再次减少运行次数,增加运行效率

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i, m;
    for (i = 101; i <= 200; i+=2)
    {
        for (m = 2; m <= sqrt(i); m++)
        {

            if (i%m == 0)
                break;
        }
        if (m >sqrt(i))//使用开平方函数,优化运行次数
            printf("%4d", i);
    }
    system("pause");
    return 0;
}

原文地址:https://blog.51cto.com/14232799/2366296

时间: 2024-10-18 22:54:13

C语言编程输出100到200的素数的两种方法,和三步优化(逐步优化)的相关文章

Java编程:用三目运算符和交换两种方法求三个数中的中间数字。

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a =sc.nextInt(); int b =sc.nextInt(); int c =sc.nextInt(); int t=0; if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; }

c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化

请编写一个程序,实现对于给定的正整数N,依次打印出小于等于N的所有素数. 方法一:试除法 由素数的定义得到如下程序: #include<stdio.h> int print_prime(int num)//prime表示素数 { int i = 0; for (i = 2; i <= num; i++) { int j = 0; for (j = 2; j < i; j++) { if (i%j == 0) { break; } } if (i==j) { printf("

【Python实践-7】输出100以内的所有素数

1 #输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). 2 i=2 3 l=[] 4 while i<100: 5 k=0 6 for j in range(2,i): 7 if i%j==0: 8 k=k+1 9 if k==0: 10 l.append(i) 11 i=i+1 12 print(" ".join(str(i) for i in l)) 知识点: 1.素数,又称质数,定义为在大于1的自然数中,除了1和它本身以外不再有其他因数

【c语言】期望输出str = hello world 的两种方法

// 期望输出str = hello world 的两种方法 #include <stdio.h> char *GetStr(char **p) { *p = "hello word"; return *p; } int main() { char *str = NULL; if (NULL != GetStr(&str)) { printf(" str = %s\n",str); } return 0; } </pre><pr

找1~100之间素数的两种比较简单的方法

方法一:利用一个布尔类型的值的判断,优点想法更直接易懂 public static void main(String[] args) { for(int i=2;i<=100;i++){ boolean b=true; for(int n=2;n<i;n++){ if(i%n==0){ b=false; break; } } if(b==true){ System.out.print(i+"\t"); } } } 方法二:能被2和这个数本身以外的数整除的都不是素数.理解难但

shell 脚本实现乘法口诀表的两种方法——shell与C语言

shell 脚本实现乘法口诀表的两种方法--shell与C语言 话不多说直接给出代码: 1 #!/bin/bash 2 if [ $# -eq 0 ] //用于判断输入的参数个数为0 3 then 4 echo "welcome you!" 5 echo "this is a test with 2 methods to output arbitrarily mux table!" 6 else 7 echo "sorry you input invlia

c语言:输出100~200之间的不能被3整除的数。

输出100~200之间的不能被3整除的数. 解:程序: #include<stdio.h> int main() { int i=0; printf("打印出不能被3整除的数:"); for (i = 100; i <= 200; i++) { if (i%3 == 0) { continue; } printf("%d ",i); } printf("\n"); return 0; } 结果: 打印出不能被3整除的数:100 

Problem B: 调用函数,输出100到200之间的所有素数

#include <stdio.h> int isPrime(unsigned int n)//定义素数函数 { int i; if(n == 0 || n == 1) return 0; for(i = 2; i * i <= n; i++) { if(n % i == 0) return 0; } return 1; } int main(void)//主函数 { int i,count=0; for(i = 100; i <= 200; i++) { if(isPrime(i

C语言编程 两种方法打印一个菱形(渐入显示)

<1>第一种方法,利用字符数组定义一个空格数组和一个符号数组, 然后找到数组中间的元素,操作空格字符从中间开始向两边与符号数组的元素互换, 每互换一次进行一次输出,打印上半个菱形和下半个菱形需要两个for语句的支持. 源代码如下: #include<stdio.h> #include<stdlib.h> #include<windows.h>//为了使用延时语句Sleep而调用 int main() { char suu1[] = "*******