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() 语句至少执行一次的题目,前面已经说过了。

  • 基础数学:

  • 质因数:质因数是合数的特殊因数,每个合数都可以表示为若干个质数相乘的形式。这些质数被称为该合数的质因数。例如,数字 1515 可以分解为 3355 两个质数相乘,因此 33551515 的质因数。值得注意的是,质因数必须是该合数的因数并且是质数,并不是每个合数的因数都是它的质因数。

  • 分解质因数:

  • 分解质因数的方法主要有两种

  • 相乘法:将合数写成几个质数相乘的形式,例如 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;
}

唯一分解定理:

  • 定义:任何一个大于 11 的整数 nn 都可以分解成若干个素因数的连乘积,如果不计各个素因数的顺序,那么这种分解是惟一的。
  • n2n \geq 2 为整数,则有唯一的分解式为: $n = P_1^{a_1} · P_2^{a_2} · P_3^{a_3} · ... · P_m^{a_m}$ ,也就是 n=i=1mPiain = \prod_{i = 1}^{m}{P_i^{a_i}} ,其中 p1<p2<p3<...<pm1<pmp_1 < p_2 < p_3 < ... < p_{m - 1} < p_mpip_i 为质数,aia_i​ 为正整数。

约数(因数)个数定理:

  • 根据唯一分解定理可得,nn 的约数个数为 $d(n) = (1 + a_1) · (1 + a_2) · (1 + a_3) · ... · (1 + a_m)$ ,也就是 d(n)==i=1m(ai+1)d(n) = = \prod_{i = 1}^{m}{(a_i + 1)} 。比如:28=22728 = 2^2 · 7d(28)=(2+1)(1+1)=6d(28) = (2 + 1) · (1 + 1) = 6
  • 同样,nn 的约数和为 $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})$ 。比如:S(28)=(1+2+4)(1+7)=56S(28) = (1 + 2 + 4) · (1 + 7) = 56​ 。
  • S(n)=2NS(n) = 2N 时,nn​ 就是完全数。
  • 完全数:又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如,6,28,496,8128,335503366, 28, 496, 8128, 33550336 都是完全数,现在已经发现了 5151 个完全数。

0 条评论

目前还没有评论...