C++程序找出给定序列中的不同元素

假设我们给定了三个整数 n、x、y 和 z。我们必须从给定的整数中创建一个序列,其中序列的第一项是 (x modulo 2 31 )。除了第一个元素,序列中的其他元素 a i = (a (i-1) * y + z) modulo 2 31,其中 1 ≤ i ≤ n - 1。我们必须找出不同整数的数量我们制作的序列。

所以,如果输入像 n = 5, x = 1, y = 2, z = 1,那么输出将是 5。

唯一值是 {1, 3, 7, 15, 31}。所以,答案是5。

示例

让我们看看以下实现以获得更好的理解 -

#include <cmath>

#include <cstdio>

#include <vector>

#include <iostream>

#include <algorithm>

using namespace std;

const long long MOD = 2147483648;

int solve(int n, long long x, long long y, long long z) {

   vector<bool> temp;

   temp.resize(MOD);

   long long p = x % MOD;

      temp[p] = true;

      int ans = 1;

      for (int i = 1; i < n; ++i) {

         p = ((p * y) + z) % MOD;

         if (temp[p])

            break;

         ++ans;

         temp[p] = true;

   }

   return ans;

}

int main() {

cout<< solve(5, 1, 2, 1) <<endl;

return 0;

}

输入

5, 1, 2, 1
输出结果
5

以上是 C++程序找出给定序列中的不同元素 的全部内容, 来源链接: utcz.com/z/322578.html

回到顶部