CMNSOFT平台
12.因数分解
发表时间:2026-02-18 13:42:11    作者:孙自超

因数也叫约数,定义:整数a除以整数b(b≠0) 的商正好是整数(没有余数),我们就说b是a的因数。比如1,2,5,10都是10的因数,因为它们都能被10整除。

例题

设计交互程序,列举一个非0整数所有的因数。例如:输入8,输出1,2,4,8。输入14,输出1,2,7,14。

1.分析

通过题目分析,我们解题思路如下:

  1. 输入一个非0整数保存到变量N。
  2. 依次用1~N的整数去除变量N。
  3. 如果相除余数为0,说明这个数就是变量N的因数。

2.流程图

根据解题思路,画出流程图如下:

3.程序

根据流程图顺序,可写出实验代码如下:

#include <bits/stdc++.h> using namespace std; int main() { int N,i; cin>>N; while(i<=N){ if(N%i==0) cout<<i<<endl; i+=1; } return 0; }
N = int(input()) i = 1 while i<=N: if(N % i == 0): print(i) i = i+1

4.优化

通过流程图和代码的分析,如果输入整数是10,那程序就要循环10次,进行10次比较。如果整数是10000,循环次数就是10000。运行循环的次数与输入的N值相关。那有没有可以减少循环次数的方法呢?答案是肯定的,我们看下面这流程图。

大家看明白优化原理了吗?能算出优化后程序循环次减少多少吗?

5.优化后代码

#include <bits/stdc++.h> using namespace std; int main() { int N,i; cin>>N; while(i<=N/2){ if(N%i==0){ cout<<i<<endl; cout<<N/i<<endl; } i+=1; } return 0; }
N = int(input()) i = 1 while i<=N//2: if(N % i == 0): print(i) print(N//i) i = i+1
思考:为什么第4,8两行代码用N//2而不是N/2

练习

把本节课例子用for语句改写。


@程序设计
Copyright © 2025 Sun zi chao - Website Content All Rights Reserved.  [第六版]
桂ICP备11003301号 桂公网安备45040302000027号运行:17天访问量:799