C++高祖刘邦问韩信统御士兵多少,韩信答说,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人……刘邦茫然而不知其数。 请求出满足要求的前N个韩信统御的士兵数量。 输入 正整数N,1=<N<100 输出 前N个韩信统御的士兵数量
时间: 2024-04-01 22:33:27 浏览: 24
这是一道数学问题,可以使用中国剩余定理来解决。具体做法如下:
首先计算出所有条件的总和,即 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 个满足条件的士兵数量。
c++,不继承QSortFilterProxyModel第一列过滤本月信息,第二列过滤人名叫小明的
你可以通过继承QSortFilterProxyModel并重写filterAcceptsRow函数来实现这个功能。具体步骤如下:
1. 继承QSortFilterProxyModel:
```
class MySortFilterProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
explicit MySortFilterProxyModel(QObject *parent = nullptr);
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
};
```
2. 在构造函数中设置过滤规则:
```
MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
}
bool MySortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);
QModelIndex index1 = sourceModel()->index(source_row, 1, source_parent);
QVariant data0 = sourceModel()->data(index0);
QVariant data1 = sourceModel()->data(index1);
if (data0.toString().startsWith(QDate::currentDate().toString("yyyy-MM"))) {
if (data1.toString() == "小明") {
return true;
}
}
return false;
}
```
3. 在使用QTableView时,使用MySortFilterProxyModel代替QSortFilterProxyModel即可。
```
MySortFilterProxyModel *proxyModel = new MySortFilterProxyModel(this);
proxyModel->setSourceModel(model);
tableView->setModel(proxyModel);
```