使用 C++ 重复单位除法

在本文中,我们将讨论找到可被 N 整除的重复单元数。重复单元仅是 1 的重复数,设R(k)为重复单元,其中 k 是 1 的长度。E.gR(4) = 1111. 所以我们需要找到R(k)可以被 N 整除的 k 的最小数目,例如 -

Input : N = 13
Output : k = 6
Explanation : R(6)i.e111111 is divisible by 13.

Input : N = 31
Output : k = 15

寻找解决方案的方法

您可以通过检查从 1 开始的 k 的每个值来解决这个问题,其中R(k)可以被 N 整除。但是使用这个解决方案,我们不会发现 N 是否可以被 的任何值整除R(k)。这会使程序过于复杂,甚至可能无法运行。

解决该程序的一种有效方法是,

  • 检查 N 是否与 10 互质。

  • 如果不是,则R(k)对于任何 k 值都不能被 N 整除。

  • 如果是,则对于每个重复单元 R(1)、R(2)、R(3)...等,计算R(i)和 N的除法余数,所以将有 n 个余数。

  • 为R(i)and找出相同的余数R(j),其中R(i)和R(j)是两个重复单位,因此R(i)-R(j)将被 N 整除。

  • 的aThe差R(i)和R(j)将被重复单元乘以10一些功率,但是,10和N是互质的,所以R(k)会通过N.整除

示例

#include <bits/stdc++.h>
using namespace std;

int main() {
   int N = 31;
   int k = 1;
   // 检查 N 是否与 10 互质。
   if (N % 2 == 0 || N % 5 == 0){
      k = 0;
   } else {
      int r = 1;
      int power = 1;
      // 检查直到余数可以被 N 整除。
      while (r % N != 0) {
         k++;
         power = power * 10 % N;
         r = (r + power) % N;
      }
   }
   cout << "k 的值: "<< k;
   return 0;
}
输出结果
k 的值: 15

结论

在本文中,我们讨论了为 找到 k 的值R(k),其中R(k)重复单位可以被给定整除,N.We讨论了一种找到 k 值的乐观方法。我们还讨论了 C++ 代码来解决这个问题。您可以使用任何其他语言(如 Java、C、Python 等)编写此代码。我们希望本文对您有所帮助。