目录
题目:
给定一个大于 1 的整数 n
,找出 n
的除 1 以外的最小因数 i
,并计算 n
除以这个最小因数 i
的商 m
,最后输出这个商 m
。
代码解析:
#include <bits/stdc++.h>
using namespace std;
int n,m;
int main(){
// 输入一个整数 n
cin>>n;
// 从 2 开始遍历到 n - 1
for(int i=2;i<n;i++){
// 如果 i 是 n 的因数
if(n%i==0){
// 计算 n 除以 i 的商
m=n/i;
// 输出商 m
cout<<m;
// 找到最小因数后,跳出循环
break;
}
}
return 0;
}
代码详细解释
- 头文件与命名空间:
#include <bits/stdc++.h>
:这是一个万能头文件,包含了 C++ 标准库中的大多数常用头文件,方便编程时使用各种标准库函数和对象。using namespace std;
:使用标准命名空间,这样在代码里就可以直接使用标准库中的标识符,无需添加std::
前缀。
- 全局变量定义:
int n,m;
:定义两个整型变量,n
用于存储输入的整数,m
用于存储n
除以其除 1 以外的最小因数的商。
- 主函数
main
:cin>>n;
:从标准输入读取一个整数n
。for(int i=2;i<n;i++)
:使用for
循环从 2 开始遍历到n - 1
,寻找n
的除 1 以外的最小因数。if(n%i==0)
:判断i
是否为n
的因数,如果n
能被i
整除,则i
是n
的因数。m=n/i;
:计算n
除以i
的商,并将结果存储在m
中。cout<<m;
:输出商m
。break;
:找到最小因数后,使用break
语句跳出循环,避免继续寻找其他因数。
- 程序结束:
return 0;
:主函数正常结束,返回 0 表示程序成功执行。
复杂度分析
- 时间复杂度:最坏情况下,需要遍历到
n - 1
才能找到最小因数,因此时间复杂度为 O(n)。 - 空间复杂度:只使用了两个整型变量
n
和m
,因此空间复杂度为 O(1)。
注意事项
- 该代码假设输入的
n
是大于 1 的整数,如果输入为 1 或小于 1 的数,代码不会输出任何结果。在实际应用中,可以添加输入验证逻辑来处理这种情况。 - 代码只找出了除 1 以外的最小因数所对应的商,如果需要找出所有因数或进行其他操作,需要对代码进行相应的修改。
分享