最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)

 更新時間:2021年11月26日 09:36:46   作者:小輝_Super  
本文詳細(xì)講解了C語言實(shí)現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)個數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。需要的朋友可以收藏下,方便下次瀏覽觀看

本人C語言萌新,最近工作中頻頻出現(xiàn)C語言小錯誤,遂決定使用笨方法提高我的C語言水平,堅持每天一個C語言小練習(xí),養(yǎng)成C語言手感,從此讓編程成為習(xí)慣。

題目描述

統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)

分析

素數(shù)(prime number)又稱質(zhì)數(shù),在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的數(shù)稱為質(zhì)數(shù),2是最小的素數(shù)。

代碼實(shí)現(xiàn)

#include <stdio.h>

#define INTEGER_RANGE 100  //數(shù)字范圍

int if_prime(int num);

int main()
{
    int sum = 0;
    /* 2是最小的素數(shù),for循環(huán)范圍為2-100 */
    for(int i = 2; i <= INTEGER_RANGE; i++)
    {
        if(if_prime(i))
            sum++;
    }
    printf("%d以內(nèi)的素數(shù)個數(shù)為:%d\n", INTEGER_RANGE, sum);
    return 0;
}

/*
 * 判斷是否為素數(shù),是則返回1,否返回0
 * */
int if_prime(int num)
{
    int i = 0;
    for(i = 2; i < num; i++)
    {
        /* 如果該數(shù)有存在1以外的其他正因數(shù),則不是素數(shù) */
        if(num % i == 0)
            return 0;
    }
    return 1;
}

運(yùn)行結(jié)果

后期完善

這里只對if_prime(num)函數(shù)進(jìn)行完善:

  1. 增加非法數(shù)字的判斷,num小于2直接返回0
  2. 將循環(huán)范圍由2~num-1改成2~sqrt(num)

至于為什么用sqrt,這里借用下別人的解釋(比較通俗易懂)

當(dāng)一個數(shù)不是素數(shù)的時候,那這數(shù)肯定是除了它本身和1外的兩個數(shù)之積( a*b = m ),如果設(shè) a是小于或者等于 b的數(shù),那 a肯定是小于等于 m的開根,即 a <= sqrt( m ) ?!俣荣N吧(C語言吧)

還有一種用法是把num改成num/2,但是當(dāng)num大于4時,sqrt(num)num/2小,所以用sqrt(num)的效率比用num/2高。
至于為什么可以用num/2,這里也借用別人的解釋(有點(diǎn)難懂)

其實(shí)這是數(shù)學(xué)知識,n不除以2也行,只是運(yùn)算量更大,其實(shí)最少運(yùn)算量的方法是n開根號。
我證明一下合理性吧。用反證法。
如果一個數(shù)是合數(shù),則一定能分解成兩個不是1的數(shù)相乘,所以能被分解成一個大于等于2的數(shù)和一個小于等于n/2相乘。
如果這個數(shù)沒有一個小于等于n/2的因數(shù),那它一定不是合數(shù),所以它一定是素數(shù),不用再檢查后面的數(shù)了。這里是小于n/2,是因為如果這個數(shù)能被n/2整除,那2一定是它的因數(shù),很容易知道2小于等于n/2,所以在檢查n/2之前一定檢查過2。證明完成!
n開根號也差不多這樣證明?!?a rel="external nofollow" target="_blank">https://fishc.com.cn/thread-181309-1-1.html

如果你對上面的兩種用法都不理解,那記住它們就行了。。。

#include <math.h>
/*
 * 判斷是否為素數(shù),是則返回1,否返回0(改進(jìn)版)
 * */
int if_prime(int num)
{
    if(num < 2)
        return 0; //最小的素數(shù)為2
    int i = 0;
    //sqrt():開方函數(shù)(一定要寫小于等于)
    for(i = 2; i <= sqrt(num); i++)
    {
        /* 如果該數(shù)有存在1以外的其他正因數(shù),則不是素數(shù) */
        if(num % i == 0)
            return 0;
    }
    return 1;
}

網(wǎng)上參考

原文鏈接:https://www.runoob.com/cprogramming/c-exercise-example36.html
sqrt()為開方函數(shù),需要加math.h頭文件

//  Created by www.runoob.com on 15/11/9.
//  Copyright ? 2015年 菜鳥教程. All rights reserved.
//
 
#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n=0;
    for(i=2;i<=100;i++)
    {
        k=(int)sqrt(i);
        for(j=2;j<=k;j++)
            if(i%j==0) break;
        if(j>k)
        {
            printf("%d ",i);
            n++;
            if(n%5==0)
                printf("\n");
        }
    }
    return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語言處理函數(shù)調(diào)用的方法

    c語言處理函數(shù)調(diào)用的方法

    函數(shù)就是一段封裝好的,可以重復(fù)使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復(fù)的代碼。這篇文章主要介紹了c語言是如何處理函數(shù)調(diào)用的?需要的朋友可以參考下
    2021-11-11
  • C語言詳細(xì)分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用

    C語言詳細(xì)分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用

    C語言內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,下面這篇文章主要給大家介紹了關(guān)于C語言內(nèi)存管理realloc、calloc、malloc、free函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • VC實(shí)現(xiàn)動態(tài)菜單的創(chuàng)建方法

    VC實(shí)現(xiàn)動態(tài)菜單的創(chuàng)建方法

    這篇文章主要介紹了VC實(shí)現(xiàn)動態(tài)菜單的創(chuàng)建方法,需要的朋友可以參考下
    2014-07-07
  • Qt QStandardItemModel用法小結(jié)

    Qt QStandardItemModel用法小結(jié)

    QStandardItemModel可用作標(biāo)準(zhǔn)Qt數(shù)據(jù)類型的存儲庫,本文主要介紹了Qt QStandardItemModel用法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • C++詳解如何實(shí)現(xiàn)兩個線程交替打印

    C++詳解如何實(shí)現(xiàn)兩個線程交替打印

    這篇文章主要介紹了使用C++庫實(shí)現(xiàn)兩個線程交替打印,一個線程打印奇數(shù)、一個線程打印偶數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C/C++中線程基本概念與創(chuàng)建詳解

    C/C++中線程基本概念與創(chuàng)建詳解

    線程是在進(jìn)程中產(chǎn)生的一個執(zhí)行單元,是CPU調(diào)度和分配的最小單元,其在同一個進(jìn)程中與其他線程并行運(yùn)行,他們可以共享進(jìn)程內(nèi)的資源。本文就和大家一起聊聊線程基本概念以及如何創(chuàng)建多線程,需要的可以參考一下
    2022-09-09
  • c++中vector<int>和vector<int*>的用法及區(qū)別

    c++中vector<int>和vector<int*>的用法及區(qū)別

    這篇文章主要介紹了c++中vector<int>和vector<int*>的用法及區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2013-10-10
  • C語言實(shí)現(xiàn)第一次防死版掃雷游戲

    C語言實(shí)現(xiàn)第一次防死版掃雷游戲

    大家好,本篇文章主要講的是C語言實(shí)現(xiàn)第一次防死版掃雷游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 詳解C++編程中對于函數(shù)的基本使用

    詳解C++編程中對于函數(shù)的基本使用

    這篇文章主要介紹了詳解C++編程中對于函數(shù)的使用,包括函數(shù)的參數(shù)和返回值以及調(diào)用等基本的知識點(diǎn),需要的朋友可以參考下
    2015-09-09
  • C++實(shí)現(xiàn)LeetCode(97.交織相錯的字符串)

    C++實(shí)現(xiàn)LeetCode(97.交織相錯的字符串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(97.交織相錯的字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

华坪县| 民丰县| 麻江县| 峨边| 黑河市| 兴海县| 连云港市| 修武县| 吉木乃县| 婺源县| 重庆市| 曲水县| 定西市| 桂平市| 舟曲县| 平邑县| 崇仁县| 杨浦区| 建德市| 云南省| 亳州市| 霍邱县| 荥阳市| 黑山县| 南澳县| 苍南县| 本溪市| 罗定市| 沧州市| 富锦市| 海安县| 太仆寺旗| 江安县| 兴城市| 崇州市| 铜梁县| 芦山县| 聂拉木县| 乌拉特前旗| 海安县| 乌海市|