模数和二进制数

Modulus and Binary Numbers

#include <iostream>
using namespace std;



int main()
{
    int index = 0;
    int val;
    int x;

    while (val != 0)
    {

    cin >> val;



    for (index = 1; index < 32; index++)
    {
        x = val * index - index / index;
        cout << x << " " << val << " " << index << endl;
        cout << x % 4 << endl;
        cout << x % 3 << endl;
        cout << x % 2 << endl;

    }
    }


    return 0;
}

为什么当输入为<1, 2, 3, 4...>时,每第31个索引都用类似于输入1的算法进行编码,即索引- 1;但模式是:

十二 (1-12, 12 -24) [000, 111, 220, 301, 010, 121, 200, 311, 020, 101, 211, 321] , [000, 111, 220, 301 , 010...重复输入 <1>;

第 31 个索引:[1]200, 111, 020, 301, 210, 121, 000, 311, 220, 101, 010, 321, 200...[13]

为什么关系相似,这在二进制中有什么原因吗?

编辑:为了澄清问题,当你取某个整数的余数时,关系变得特定于每个增量......这是因为二进制以及语义如何基于实现方式的原因收敛整数值到二进制值?我知道高级编程使用散列并在程序内通信……但主要思想是整数值是特定于二进制的……这是特定于二进制的操作还是只是一些显示数字模式的随机算法?

重要事实:

12 mod 2 == 12 mod 3 == 12 mod 4 == 0

另一个重要的事实,更抽象一点:

(x + y) mod k == ((x mod k) + (y mod k)) mod k

(假设x,y,k均为整数。)

从第二个事实,我们可以推导出:

(x + 12) mod k == ((x mod k) + (12 mod k)) mod k

碰巧:

(x mod k) mod k == x mod k

现在我们知道了

(x + 12) mod 2 == (x mod 2) + 0 == x mod 2
(x + 12) mod 3 == (x mod 3) + 0 == x mod 3
(x + 12) mod 4 == (x mod 4) + 0 == x mod 4

所以模组的模式会以12个周期重复

一般来说,循环长度将是除数的最小公倍数。