C++高祖刘邦问韩信统御士兵多少,韩信答说,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人……刘邦茫然而不知其数。 请求出满足要求的前N个韩信统御的士兵数量。 输入 正整数N,1=<N<100 输出 前N个韩信统御的士兵数量#include <iostream> using namespace std; int main() { int N; cin >> N; int number(int a); int t = number(N); retu
时间: 2024-04-01 19:33:02 浏览: 17
rn 0; } int number(int a) { int x = 3, y = 5, z = 7; int count = 0, num = 0; while (count < a) { num++; if (num % x == 1 && num % y == 2 && num % z == 4) { count++; cout << num << endl; } } return num; }
相关问题
C++高祖刘邦问韩信统御士兵多少,韩信答说,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人……刘邦茫然而不知其数。 请求出满足要求的前N个韩信统御的士兵数量。 输入 正整数N,1=<N<100 输出 前N个韩信统御的士兵数量
这是一道数学问题,可以使用中国剩余定理来解决。具体做法如下:
首先计算出所有条件的总和,即 3+5+7+13+...,假设为 M。然后对于每个条件,计算出 M 除以该条件的数的余数,假设为 r1, r2, r3, r4, ...。例如对于 3人一列余1人的条件,余数为 1,因为 M 除以 3 的余数为 1。
然后求解以下同余方程组:
x ≡ r1 (mod 3)
x ≡ r2 (mod 5)
x ≡ r3 (mod 7)
x ≡ r4 (mod 13)
...
其中 x 就是我们要求的士兵数量。可以使用扩展欧几里得算法求解此方程组,也可以使用中国剩余定理的通用解法。
求得 x 后,再对 x 加上 M 的倍数,得到下一个满足条件的士兵数量。例如,如果第一个满足条件的士兵数量为 x,那么第二个就是 x+M,第三个就是 x+2M,以此类推,直到求出前 N 个为止。
下面是一份使用扩展欧几里得算法求解同余方程组的 C++ 代码:
高祖刘邦问韩信统御士兵多少,韩信答说,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人……刘邦茫然而不知其数。 请求出满足要求的前N个韩信统御的士兵数量。 输入 正整数N,1=<N<100, 输出 前N个韩信统御的士兵数量C++
以下是使用扩展欧几里得算法求解同余方程组的 C++ 代码,可以求出前 N 个满足条件的士兵数量:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 扩展欧几里得算法,求 ax + by = gcd(a, b) 的一组解
void exgcd(int a, int b, int &x, int &y, int &gcd) {
if (b == 0) {
x = 1;
y = 0;
gcd = a;
return;
}
exgcd(b, a % b, y, x, gcd);
y -= a / b * x;
}
// 求解同余方程组 x ≡ r[i] (mod m[i])
int chinese_remainder(const vector<int> &m, const vector<int> &r) {
int n = m.size();
int M = 1;
for (int i = 0; i < n; i++) {
M *= m[i];
}
int x = 0;
for (int i = 0; i < n; i++) {
int Mi = M / m[i];
int xi, yi, gcd;
exgcd(Mi, m[i], xi, yi, gcd);
x += r[i] * xi * Mi;
}
return (x % M + M) % M;
}
int main() {
int n;
cin >> n;
vector<int> m = {3, 5, 7, 13};
vector<int> r = {1, 2, 4, 6};
int x = chinese_remainder(m, r);
int M = 1;
for (int i = 0; i < m.size(); i++) {
M *= m[i];
}
for (int i = 0; i < n; i++) {
cout << x << endl;
x += M;
}
return 0;
}
```
这份代码中,exgcd 函数实现了扩展欧几里得算法,chinese_remainder 函数实现了求解同余方程组的过程。在 main 函数中,先定义了条件中的模数和余数,然后调用 chinese_remainder 函数求解出一个满足所有条件的士兵数量 x,再通过循环求出前 N 个满足条件的士兵数量。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)