课外练习5-1
第一题:
编写汉书int combine(int n, int k)。计算组合数C(n,k) = n! / (k! * (n -
k)!),在main函数中用该函数计算C(4,2),C(6,4),C(8,7)并输出。
#include<iostream>
using namespace std;
//计算阶乘
int calc(int n) {
int ret = 1;
if (n == 0) return 1;
for (int i = 1; i <= n; i++) {
ret *= i;
}
return ret;
}
//计算Cnk
int combine(int n, int k) {
int num1 = calc(k);//num1代表分母
int num2 = calc(n) / calc(n - k);//num2代表分子
return num2 / num1;
}
int main() {
int res1 = combine(4, 2);
int res2 = combine(6, 4);
int res3 = combine(8, 7);
cout << "C(4, 2) = " << res1 << endl;
cout << "C(6, 4) = " << res2 << endl;
cout << "C(8, 7) = " << res3 << endl;
return 0;
}
第二题:
判断素数
#include<iostream>
using namespace std;
//判断素数
bool IsPrime(int n) {
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
if (IsPrime(n)) cout << "Yes";
else cout << "No";
return 0;
}
第三题:
编程将任意一个大正偶数都能分解为两个素数之和,例如,6=3+3、8=3+5。
要求:编写函数bool IsPrime(int
n)判断n是否为素数,若是返回true,否则返回false。在main中通过调用IsPrime函数实现程序功能:输入整数n,若n不是大于2的正偶数,则报错;否则,输出分解的结果。
#include<iostream>
using namespace std;
bool isPrime(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
if (n <= 2 || n % 2 != 0) {
cout << "It's not an even larger than 2!";
return 0;
}
for (int i = 2; i < n; i++) {
if (isPrime(i)) {
if (isPrime(n - i)) {
if (i < n - i) cout << n << "=" << i << "+" << n - i << endl;
}
}
}
return 0;
}