- C++
循环结构
- @ 2025-10-12 11:19:46
C++学习内容:
-
循环语句
for、基础数学(分解质因数) -
for语句语法:for(初始化语句; 循环条件; 迭代语句) -
同学们可以参考
while语句学习,其实就是将变量、条件、自增结合在一起而已,多去使用就明白了。 -
以下举例:输出
20以内所有的偶数。
#include <iostream>
using namespace std;
int main(){
for (int i = 1; i <= 20; i++) {
if (i % 2 == 0) {
cout << i << " ";
}
}
return 0;
}
-
循环语句
while、do...while()、基础数学(质数、合数) -
while语句与do...while()语句: -
while语句语法:
while(条件){
执行语句;
}
do...while()语句语法:
do{
执行语句;
} while (条件);
-
注意点:
do...while()语句至少执行一次。 -
循环语句通常配合循环控制语句
break、continue使用。以下进行举例: -
举例内容为:循环输出
1 - 20以内的偶数,如果是奇数将不会输出,直接跳过本次循环,如果超过20会直接结束循环。
#include <iostream>
using namespace std;
int main(){
int i = 1;
while (true) {
if (i % 2 != 0) {
i++; // 增加 i(注意和下面不同,这里是先增加在跳出循环)
continue; // 如果是奇数跳出本次循环
}
if (i % 2 == 0) {
cout << i << " "; // 如果是偶数直接输出
i++; // 增加 i(这里是先输出在增加 i)
}
if (i > 20) { // 如果 i 大于 20 直接结束整个循环
break;
}
}
return 0;
}
-
通常情况会使用
while语句,而不是do...while()语句,可能在考试中会问道do...while()语句至少执行一次的题目,前面已经说过了。 -
基础数学:
-
质因数:质因数是合数的特殊因数,每个合数都可以表示为若干个质数相乘的形式。这些质数被称为该合数的质因数。例如,数字 可以分解为 和 两个质数相乘,因此 和 是 的质因数。值得注意的是,质因数必须是该合数的因数并且是质数,并不是每个合数的因数都是它的质因数。
-
分解质因数:
-
分解质因数的方法主要有两种
-
相乘法:将合数写成几个质数相乘的形式,例如
36可以分解为2 × 2 × 3 × 3。 -
短除法:从最小的质数开始除,一直除到结果为质数为止。例如,28可以分解为
2 × 2 × 7。 -
以下用短除法进行分解质因数(输入一个数字,对该数字分解质因数):
| 步骤 | 公式 |
|---|---|
1 |
100 / 2 = 50 |
2 |
50 / 2 = 25 |
3 |
25 / 5 = 5 |
4 |
5 / 5 = 1 |
#include <iostream>
#include <cmath>
using namespace std;
int main(){
// 输入
int n;
cin >> n;
// 分解质因数
for (int i = 2; i <= sqrt(n); i++) { // 枚举质数
while (n % i == 0) { // 如果能被质数整除就继续
cout << i << " "; // 输出质因数
n /= i; // 除掉这个质因数
}
}
// 特例(比如 3,本身就是质数,不用上面分解,以及 6 这种的,分解完剩下的 3 上面也分解不了)
// 另外 1 也是特例,所以最后的 n 大于 1 才输出
if (n > 1) {
cout << n;
}
return 0;
}
-
因数个数:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
// 输入
long long n;
cin >> n;
long long cnt = 0;
long long ans = 0;
// 分解质因数
for (long long i = 2; i <= sqrt(n); i++) { // 枚举质数
cnt = 0;
while (n % i == 0) { // 如果能被质数整除就继续
// cout << i << " "; // 输出质因数
cnt++;
n /= i; // 除掉这个质因数
}
cout << i << " 有 " << cnt << " 个。" << endl;
ans += cnt;
}
// 特例(比如 3,本身就是质数,不用上面分解,以及 6 这种的,分解完剩下的 3 上面也分解不了)
// 另外 1 也是特例,所以最后的 n 大于 1 才输出
if (n > 1) {
// cout << n;
cout << n << " 有 " << 1 << " 个。" << endl;
ans += 1;
}
cout << "一共有 " << ans << " 个。" << endl;
return 0;
}
唯一分解定理:
-
定义:任何一个大于 的整数 都可以分解成若干个素因数的连乘积,如果不计各个素因数的顺序,那么这种分解是惟一的。
-
设 为整数,则有唯一的分解式为: $n = P_1^{a_1} · P_2^{a_2} · P_3^{a_3} · ... · P_m^{a_m}$ ,也就是 ,其中 且 为质数, 为正整数。
约数(因数)个数定理:
-
根据唯一分解定理可得, 的约数个数为 $d(n) = (1 + a_1) · (1 + a_2) · (1 + a_3) · ... · (1 + a_m)$ ,也就是 。比如: , 。
-
同样, 的约数和为 $S(n) = (1 + p_1 + p_1^2 + ... + p_1^{a_1}) · (1 + p_2 + p_2^2 + ... + p_2^{a_2}) · (1 + p_k + p_k^2 + ... + p_k^{a_k})$ 。比如: 。
-
当 时, 就是完全数。
-
完全数:又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如, 都是完全数,现在已经发现了 个完全数。
0 条评论
目前还没有评论...