Python算法100例-3.5 親密數

  • 1.問題描述
  • 2.問題分析
  • 3.算法設計
  • 4.確定程序框架
  • 5.完整的程序
  • 6.問題拓展

1.問題描述

如果整數A的全部因子(包括1,不包括A本身)之和等于B,且整數B的全部因子(包括1,不包括B本身)之和等于A,則將整數A和B稱為親密數。求3000以內的全部親密數。

2.問題分析

按照親密數定義,要判斷整數a是否有親密數,只要計算出a的全部因子的累加和,將其存到變量b,再計算b的全部因子的累加和設為n,若n等于a,則可判定a和b是親密數。

3.算法設計

計算數a的各因子的算法:用a依次對i(i的范圍可以是1~a-1或1~a/2-1)進行模(“%”,在編程過程中一定要注意求模符號兩邊參加運算的數據必須為整數)運算,若結果等于0,則i為a的一個因子;否則i就不是a的因子。將所求得的因子累加到變量b。

接下來求變量b的因子:算法同上,將b的因子之和累加到變量n。根據親密數的定義判斷變量n是否等于變量a(if(n==a)),若相等,則a和b是一對親密數,反之則不是。

4.確定程序框架

程序的簡單流程圖如圖所示。

在這里插入圖片描述

5.完整的程序

# 親密數if __name__=="__main__":print("3000以內的全部親密數為:")for a in range(1, 3000):                # 窮舉3000以內的全部整數b = 0i = 1while i <= (a//2):               # 計算數 a 的各因子,將各因子之和存放到b中if a % i == 0:b += ii += 1n = 0                                               # 計算b的各因子,將各因子之和存于 nj = 1while j <= (b//2):if b % j == 0:n += jj += 1if n == a and a < b:print("%4d -- %4d \t" %(a, b))
3000以內的全部親密數為:220 --  284 	
1184 -- 1210 	
2620 -- 2924 	

6.問題拓展

將原程序稍做改動,在最初定義的時候給變量b和n賦初值0。完整的代碼如下:

%%time
# 親密數if __name__=="__main__":print("3000以內的全部親密數為:")b = 0n = 0for a in range(3000):           # 窮舉30000以內的全部整數# 計算數a的各因子,將各因子之和存放到b中i = 1while i <= (a//2):if a % i == 0:b += ii += 1# 計算b的各因子,將各因子之和存于nj = 1while j <= (b//2):if b % j == 0:n += jj += 1if n == a and a < b:print("%4d -- %4d \t" %(a, b))
3000以內的全部親密數為:---------------------------------------------------------------------------KeyboardInterrupt                         Traceback (most recent call last)File <timed exec>:18, in <module>KeyboardInterrupt: 

可以看出程序并沒有輸出結果,即在3000這個范圍內沒有找到親密數,而實際上親密數是存在的,這是為什么呢?

后面這個程序看上去似乎沒有什么問題,但是仔細分析一下會發現:在最初定義的時候給變量b和n賦初值0,第一次執行循環體時,將a和b的因子分別累加到b和n,得到的b和n的值確實是兩個變量的因子之和,但是當再次執行循環體時,b和n的初值已不再是0,當再次把求得的因子累加到其上時,最后b和n存儲的值并不是所求當前變量的因子之和(還包括上次判斷的變量的因子之和),故最后沒有符合條件的a和b。

注意:

對于這類需要多次將某些值存儲到一個變量中的情況,一定要注意變量賦初值的位置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716809.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716809.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中國電子學會2020年6月份青少年軟件編程Sc ratch圖形化等級考試試卷四級真題。

第 1 題 【 單選題 】 1.執行下面程序&#xff0c;輸入4和7后&#xff0c;角色說出的內容是&#xff1f; A&#xff1a;4&#xff0c;7 B&#xff1a;7&#xff0c;7 C&#xff1a;7&#xff0c;4 D&#xff1a;4&#xff0c;4 2.執行下面程序&#xff0c;輸出是&#xff…

Oracle自帶的網絡工具(計算傳輸redo需要的帶寬,使用STATSPACK,計算redo壓縮率,db_ultra_safe)

--根據primary database redo產生的速率,計算傳輸redo需要的帶寬. 除去tcp/ip網絡其余30%的開銷,計算需要的帶寬公式: 需求帶寬((每秒產生redo的速率峰值/0.75)*8)/1,000,000帶寬(Mbps) --可以通過去多次業務高峰期的Statspack/AWR獲取每秒產生redo的速率峰值,也可以通過查詢視…

post請求體內容無法重復獲取

post請求體內容無法重復獲取 為什么會無法重復讀取呢&#xff1f; 以tomcat為例&#xff0c;在進行請求體讀取時實際底層調用的是org.apache.catalina.connector.Request的getInputStream()方法&#xff0c;而該方法返回的是CoyoteInputStream輸入流 public ServletInputStream…

CVE-2016-5195 復現記錄

文章目錄 poc前置知識頁表與缺頁異常/proc/self/mem的寫入流程madvise 漏洞點修復 Dirty COW臟牛漏洞是一個非常有名的Linux競爭條件漏洞&#xff0c;雖然早在2016年就已經被修復&#xff0c;但它依然影響著眾多古老版本的Linux發行版&#xff0c;如果需要了解Linux的COW&#…

Redis7 實現持久化的三種方式

1、概述 1.1、Redis持久化的重要性 數據恢復&#xff1a;Redis是一個內存數據庫&#xff0c;如果系統或服務宕機&#xff0c;內存中的數據將會丟失。Redis的持久化機制可以把數據保存到磁盤上&#xff0c;以便在系統重啟后恢復數據。這是Redis持久化最基本也是最重要的功能。…

JCL中IEFBR14和COND

JCL中IEFBR14和COND ? COND CODE&#xff0c;就是反映JCL中STEP運行狀態的參數&#xff0c;JCL正常終了的COND CODE 是0000&#xff0c;另外筆者在執行某些工具JCL時候&#xff0c;比方說簡單一個COMPARE吧&#xff0c;可能會出現0012、0004或者0016&#xff0c;0001&#xf…

JSON與Object等的相互轉換

JSON與Object的轉換 // 將 Object 對象轉換為 String 類型 String jsonString = JSON.toJSONString(body);// 將 String 或 byte[] 轉換為 JSONObject 類型 JSONObject jsonObject = JSONObject.parseObject(jsonString); // 根據鍵key獲取 JSONObject 中的某一個鍵值對的值 S…

數據結構:棧和隊列的實現附上源代碼(C語言版)

目錄 前言 1.棧 1.1 棧的概念及結構 1.2 棧的底層數據結構選擇 1.2 數據結構設計代碼&#xff08;棧的實現&#xff09; 1.3 接口函數實現代碼 &#xff08;1&#xff09;初始化棧 &#xff08;2&#xff09;銷毀棧 &#xff08;3&#xff09;壓棧 &#xff08;4&…

金三銀四求職攻略:如何在面試中脫穎而出

隨著春天的腳步漸近&#xff0c;對于眾多程序員來說&#xff0c;一年中最繁忙、最重要的時期也隨之而來。金三銀四&#xff0c;即三月和四月&#xff0c;被廣大程序員視為求職的黃金時段。在這段時間里&#xff0c;各大公司紛紛開放招聘&#xff0c;求職者們則通過一場又一場的…

初階數據結構之---棧和隊列(C語言)

引言 在順序表和鏈表那篇博客中提到過&#xff0c;棧和隊列也屬于線性表 線性表&#xff1a; 線性表&#xff08;linear list&#xff09;是n個具有相同特性的數據元素的有限序列。 線性表是一種在實際中廣泛使用的數據結構。線性表在邏輯上是線性結構&#xff0c;也就是說是連…

xxl-job--02--可視化界面各功能詳細介紹

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 可視化界面1 新增執行器2.新增任務**執行器**&#xff1a;**任務描述**&#xff1a;**路由策略**&#xff1a;**Cron**&#xff1a;cron表達式**運行模式**JobHandl…

01.18 校招 實習 內推 面經

綠*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;內推/實習/校招匯總表格 1、校招 | 中國航天科工四院四部2024春季校園招聘 校招 | 中國航天科工四院四部2024春季校園招聘 2、阿里集團24屆秋招「空缺崗位」大盤點 校招 | 阿里集團24屆校招補錄大盤點&#xff0…

全量知識系統問題及SmartChat給出的答復 之15 幣圈生態鏈

Q40. 今天聊聊關于幣圈和幣圈生態方面&#xff0c;尤其是在建立和保護各種幣圈生態鏈的問題。 主要包括各種主體、 各種權益 和 各種幣及其幣圈的 分類&#xff0c;包括 概念、關系和 鏈接和斷鏈的判斷根據等等&#xff0c; 是否有一個比較清晰的體系結構呢&#xff1f; 因為現…

java Springboot vue 健身房系統,簡單練手項目

該項目主要分為管理員和會員模塊 管理員具有&#xff1a;會員管理&#xff0c;器材管理,員工管理&#xff0c;健身課程管理 會員模塊&#xff0c;可以在線報名健身課程&#xff0c;查看自己課程 采用VUE前端開發和springboot后端開發&#xff0c;極簡代碼編寫&#xff0c;沒…

融資項目——登錄接口的開發

1. 首先創建登錄與用戶信息VO類。 Data ApiModel(description "登陸對象") public class LoginVO {ApiModelProperty("手機號")private String mobile;ApiModelProperty("密碼")private String password;ApiModelProperty("用戶類型"…

藍橋每日一題 (差分)3月3號

//3279改變數組元素 自己做TLE&#xff1a;奈何想不出怎么用差分 #include<bits/stdc.h> using namespace std; //3279 改變數組元素&#xff08;超時&#xff09; const int N2e510; vector<int>a; int t,n; int main() {cin>>t;while(t--){cin>>n;…

ubuntu20.04安裝docker及運行

ubuntu20.04安裝docker及運行 ubuntu環境版本 Ubuntu Focal 20.04 (LTS) 查看系統版本 rootubuntu20043:~# cat /proc/version Linux version 5.15.0-78-generic (builddlcy02-amd64-008) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0, GNU ld (GNU Binutils for Ubuntu) …

Vue(黑馬學習筆記)

Vue概述 通過我們學習的htmlcssjs已經能夠開發美觀的頁面了&#xff0c;但是開發的效率還有待提高&#xff0c;那么如何提高呢&#xff1f;我們先來分析下頁面的組成。一個完整的html頁面包括了視圖和數據&#xff0c;數據是通過請求從后臺獲取的那么意味著我們需要將后臺獲取…

通過XML調用CAPL腳本進行測試(新手向)

目錄 0 引言 1 XML簡介 2 通過XML調用CAPL腳本 0 引言 紀念一下今天這個特殊日子&#xff0c;四年出現一次的29號。 在CANoe中做自動化測試常用的編程方法有CAPL和XML兩種&#xff0c;二者各有各的特色&#xff0c;對于CAPL來說新手肯定是更熟悉一些&#xff0c;因為說到在C…

使用Go Validator在Go應用中有效驗證數據

作為一名開發者&#xff0c;確保Go應用中處理的數據是有效和準確的非常重要。Go Validator是一個開源的數據驗證庫&#xff0c;為Go結構體提供強大且易于使用的數據驗證功能。本篇文章將介紹Go Validator庫的主要特點以及如何在Go應用中使用它來有效驗證數據。 什么是Go Valid…