• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

-housaihao-

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

CINTA作业六

1、运用\(CRT\)求解:

\[x \equiv 8 \pmod {11} \]

\[x \equiv 3 \pmod {19} \]

解:
\(11\bmod 19\)的乘法逆元为\(7\),\(19\bmod 11\)的乘法逆元也为7。根据中国剩余定理可得方程的解为:

\[x \equiv {(8\times19\times7+3\times11\times7)} \pmod {19\times11} \]

\[x\equiv41\pmod{209} \]

2、运用\(CRT\)求解:

\[x \equiv 1 \pmod {5} \]

\[x \equiv 2 \pmod {7} \]

\[x \equiv 3 \pmod {9} \]

\[x \equiv 4 \pmod {11} \]

解:
依据中国剩余定理的推广版:
\(M=5\times7\times\times9\times11=3465\)
\(b_1=M/m_1=3465/5=693\),\(693\pmod5\)的乘法逆元为\(2\)。
\(b_2=M/m_2=3465/7=495\),\(495\pmod7\)的乘法逆元为\(3\)。
\(b_3=M/m_3=3465/9=385\),\(385\pmod9\)的乘法逆元为\(4\)。
\(b_4=M/m_4=3465/11=315\),\(315\pmod{11}\)的乘法逆元为\(8\)。
\(x\equiv(1\times693\times2+2\times495\times3+3\times385\times4+4\times315\times8)\pmod M\)
即方程的解为:

\[x\equiv1731\pmod{3465} \]

3、手动计算\(2000^{2019}\pmod{221}\),不允许使用电脑或者其他电子设备。[提示:这是一 道看上去与中国剩余定理无关的计算题。]

解:

\[221=13\times17 \]

定义\(Z_{221}\)到\(Z_{13}\times Z_{17}\)的映射\(\phi\)为

\[\phi(x)=([x \bmod 13],[x \bmod 17]) \]

根据费尔马小定理可得

\[2000^{2019}\pmod{13} \]

\[=2000^{12\times168+3}\pmod{13} \]

\[=2000^{3}\pmod{13} \]

\[=(2000\pmod{13})^3\pmod{13} \]

\[=7^3\pmod{13}=5 \]

同理:

\[2000^{2019}\pmod{17} \]

\[=2000^{16\times126+3}\pmod{17} \]

\[=2000^{3}\pmod{17} \]

\[=(2000\pmod{17})^3\pmod{17} \]

\[=11^3\pmod{17}=5 \]

所以:

\[\phi(2000^{2019})=(5,5) \]

因为

\[(5,5)\leftrightarrow5 \]

所以:

\[2000^{2019}\pmod{221}=5 \]

7、实现一个利用\(CRT\)求解同余方程的程序(\(Python\)或者 C 语言都可以)。

代码如下:

//求乘法逆元
struct RS
{
	int d;//最大公因子
	int r;//a的Bezout系数
	int s;//m的Bezout系数
};
int Mul_Inverse(int a, int m)
{
	int temp, tempx, tempy;
	int tempm = m;
	int r0 = 1, s0 = 0, r1 = 0, s1 = 1;
	RS rs;
	while (m)
	{
		int p = a / m;
		temp = m;
		m = a % m;
		a = temp;
		int tempr0 = r0, temps0 = s0;
		r0 = r1, s0 = s1;
		r1 = tempr0 - p * r1;
		s1 = temps0 - p * s1;
	}
	rs.r = r0, rs.s = s0, rs.d = a;
	while (rs.r < 0)
		rs.r += tempm;
	if (rs.d == 1)
		return rs.r;
	else
		return -1;
}

void CRT()
{
	cout << "请输入同余方程的个数" << endl;
	int n;
	cin >> n;
	cout << "请输入" << n << "个同余方程 x = a (mod m)的a,m" << endl;
	int a[1000], m[1000];
	long long M = 1;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i] >> m[i];
		M *= m[i];
	}
	int tempx = 0;
	int bi = 0, b_i = 0;
	for (int i = 0; i < n; i++)
	{
		bi = M / m[i];
		b_i = Mul_Inverse(bi, m[i]);
		tempx += a[i] * bi * b_i;
		tempx = tempx % M;
	}
	cout << "方程的解为 x = " << tempx << " (mod " << M << ")" << endl;
}

posted on 2023-11-30 20:25  尼古拉斯·铁柱  阅读(45)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3