多进制数的乘法时间复杂度O(n)?

STEM版,合并数学,物理,化学,科学,工程,机械。不包括生物、医学相关,和计算机相关内容。

版主: verdeliteTheMatrix

回复
头像
ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主
见习点评
见习点评
帖子互动: 127
帖子: 1320
注册时间: 2024年 9月 27日 23:57

#1 多进制数的乘法时间复杂度O(n)?

帖子 ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主 »

举个🌰,比如7-5-3进制数,可以表示0-104,105个整数

7-5-3进制数跟10进制数的转换

0-0-0表示0
1-1-1表示1
2-2-2表示2
3-3-0表示3
4-4-1表示4
5-0-2表示5

以此类推

6-4-2表示104

10进制数转换为7-5-3进制数很容易,求余即可。反过来,7-5-3进制数转换为十进制数可用中国剩余定理算a-b-c to (a*15 + b*21 + c*70) mod 105.

显而易见,7-5-3进制数的加法:

a-b-c + x-y-z = (a+x)-(b+y)-(c+z),只需要对每位计算一次,完全不需要考虑进位。当然这个并不是大问题,计算机算加法也是可以同时并行计算每一位,并不是手算那种需要考虑进位的依赖。

有意思的是乘法:

a-b-c * x-y-z = (a*x) mod 7-(b*y) mod 5-(c*z) mod 3

n位的乘法只需要O(n),而非小学学的O(n^2),也比基于FFT的O(n*log n* log log n)快

我认为其中最大的优点是可并行计算,只要计算单元够多,一步就能计算出乘法结果而没有进位的依赖.

再补充一下:如果只计算一次乘法,这个办法并没有优势,用中国剩余定理转换为原10进制数仍然需要做一次很大的乘加。如果需要做很多次乘法,可以在多进制下计算出结果,再进行一次乘加转换回10进制.当然,如果不需要转换回10进制就没有这个限制

+2.00 积分 [用户 TheMatrix 给您的打赏]
上次由 ɓuoɥɔɓuɐnɥ 在 2025年 5月 1日 11:07 修改。
¡qooq ƃᴉq ɐ ǝɹɐ no⅄

标签/Tags:
cublai
正式写手
正式写手
帖子互动: 14
帖子: 139
注册时间: 2022年 7月 25日 08:32

#2 Re: 多进制数的乘法时间复杂度O(n)?

帖子 cublai »

有意思
头像
牛河梁(别问我是谁)
论坛元老
论坛元老
2023年度十大优秀网友
2024年度优秀版主
牛河梁 的博客
帖子互动: 1303
帖子: 24767
注册时间: 2022年 11月 17日 21:21
联系:

#3 Re: 多进制数的乘法时间复杂度O(n)?

帖子 牛河梁(别问我是谁) »

没细看。觉得问题是表示是怎么表示更大的数。当位数少的时候,二进制乘法的与或非电路也不复杂。即使包括先行进位。53 CS们当年搞不好都画过。
Fnhdx
论坛点评
论坛点评
帖子互动: 109
帖子: 2082
注册时间: 2022年 8月 31日 21:40

#5 Re: 多进制数的乘法时间复杂度O(n)?

帖子 Fnhdx »

位数多了怎么表示,11-9-7-5-3?
头像
ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主
见习点评
见习点评
帖子互动: 127
帖子: 1320
注册时间: 2024年 9月 27日 23:57

#6 Re: 多进制数的乘法时间复杂度O(n)?

帖子 ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主 »

Fnhdx 写了: 2025年 5月 1日 14:22 位数多了怎么表示,11-9-7-5-3?
阿基米德都给你证明好了,素数无穷多个
¡qooq ƃᴉq ɐ ǝɹɐ no⅄
m8d(8d)
著名写手
著名写手
帖子互动: 13
帖子: 253
注册时间: 2023年 10月 30日 12:18

#7 Re: 多进制数的乘法时间复杂度O(n)?

帖子 m8d(8d) »

ɓuoɥɔɓuɐnɥ 写了: 2025年 4月 30日 23:42 举个🌰,比如7-5-3进制数,可以表示0-104,105个整数

7-5-3进制数跟10进制数的转换

0-0-0表示0
1-1-1表示1
2-2-2表示2
3-3-0表示3
4-4-1表示4
5-0-2表示5

以此类推

6-4-2表示104

10进制数转换为7-5-3进制数很容易,求余即可。反过来,7-5-3进制数转换为十进制数可用中国剩余定理算a-b-c to (a*15 + b*21 + c*70) mod 105.

显而易见,7-5-3进制数的加法:

a-b-c + x-y-z = (a+x)-(b+y)-(c+z),只需要对每位计算一次,完全不需要考虑进位。当然这个并不是大问题,计算机算加法也是可以同时并行计算每一位,并不是手算那种需要考虑进位的依赖。

有意思的是乘法:

a-b-c * x-y-z = (a*x) mod 7-(b*y) mod 5-(c*z) mod 3

n位的乘法只需要O(n),而非小学学的O(n^2),也比基于FFT的O(n*log n* log log n)快

我认为其中最大的优点是可并行计算,只要计算单元够多,一步就能计算出乘法结果而没有进位的依赖.

再补充一下:如果只计算一次乘法,这个办法并没有优势,用中国剩余定理转换为原10进制数仍然需要做一次很大的乘加。如果需要做很多次乘法,可以在多进制下计算出结果,再进行一次乘加转换回10进制.当然,如果不需要转换回10进制就没有这个限制
Mod 硬件复杂性更高。硬件48bits乘法器一个周期(f>1GHz)就完成了, o啥?64bits 我不大了解能做多快。
cocojumbo
职业作家
职业作家
帖子互动: 23
帖子: 477
注册时间: 2022年 8月 1日 10:05

#8 Re: 多进制数的乘法时间复杂度O(n)?

帖子 cocojumbo »

我觉得这种讨论很不错,既然美帝逼土工另开赛道,不如就搞个基础上的突破。
比如上次有人提过3进制的计算机,那个可能不如这个,如果集成电路上可行,
这个搞不好至少在一类的计算运用中会有惊喜的发现。
ɓuoɥɔɓuɐnɥ 写了: 2025年 4月 30日 23:42 举个🌰,比如7-5-3进制数,可以表示0-104,105个整数

7-5-3进制数跟10进制数的转换

0-0-0表示0
1-1-1表示1
2-2-2表示2
3-3-0表示3
4-4-1表示4
5-0-2表示5

以此类推

6-4-2表示104

10进制数转换为7-5-3进制数很容易,求余即可。反过来,7-5-3进制数转换为十进制数可用中国剩余定理算a-b-c to (a*15 + b*21 + c*70) mod 105.

显而易见,7-5-3进制数的加法:

a-b-c + x-y-z = (a+x)-(b+y)-(c+z),只需要对每位计算一次,完全不需要考虑进位。当然这个并不是大问题,计算机算加法也是可以同时并行计算每一位,并不是手算那种需要考虑进位的依赖。

有意思的是乘法:

a-b-c * x-y-z = (a*x) mod 7-(b*y) mod 5-(c*z) mod 3

n位的乘法只需要O(n),而非小学学的O(n^2),也比基于FFT的O(n*log n* log log n)快

我认为其中最大的优点是可并行计算,只要计算单元够多,一步就能计算出乘法结果而没有进位的依赖.

再补充一下:如果只计算一次乘法,这个办法并没有优势,用中国剩余定理转换为原10进制数仍然需要做一次很大的乘加。如果需要做很多次乘法,可以在多进制下计算出结果,再进行一次乘加转换回10进制.当然,如果不需要转换回10进制就没有这个限制
FoxMe(令狐)
著名点评
著名点评
帖子互动: 125
帖子: 5079
注册时间: 2022年 7月 26日 16:46

#9 Re: 多进制数的乘法时间复杂度O(n)?

帖子 FoxMe(令狐) »

这叫residue number system,早就有人用了。但是复杂度不可能是O(n)。你的公式中:

(a*15 + b*21 + c*70) mod 105.

70很接近105,这里相乘的复杂度可能大了。
ɓuoɥɔɓuɐnɥ 写了: 2025年 4月 30日 23:42 举个🌰,比如7-5-3进制数,可以表示0-104,105个整数

7-5-3进制数跟10进制数的转换

0-0-0表示0
1-1-1表示1
2-2-2表示2
3-3-0表示3
4-4-1表示4
5-0-2表示5

以此类推

6-4-2表示104

10进制数转换为7-5-3进制数很容易,求余即可。反过来,7-5-3进制数转换为十进制数可用中国剩余定理算a-b-c to (a*15 + b*21 + c*70) mod 105.

显而易见,7-5-3进制数的加法:

a-b-c + x-y-z = (a+x)-(b+y)-(c+z),只需要对每位计算一次,完全不需要考虑进位。当然这个并不是大问题,计算机算加法也是可以同时并行计算每一位,并不是手算那种需要考虑进位的依赖。

有意思的是乘法:

a-b-c * x-y-z = (a*x) mod 7-(b*y) mod 5-(c*z) mod 3

n位的乘法只需要O(n),而非小学学的O(n^2),也比基于FFT的O(n*log n* log log n)快

我认为其中最大的优点是可并行计算,只要计算单元够多,一步就能计算出乘法结果而没有进位的依赖.

再补充一下:如果只计算一次乘法,这个办法并没有优势,用中国剩余定理转换为原10进制数仍然需要做一次很大的乘加。如果需要做很多次乘法,可以在多进制下计算出结果,再进行一次乘加转换回10进制.当然,如果不需要转换回10进制就没有这个限制
头像
ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主
见习点评
见习点评
帖子互动: 127
帖子: 1320
注册时间: 2024年 9月 27日 23:57

#10 Re: 多进制数的乘法时间复杂度O(n)?

帖子 ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主 »

FoxMe 写了: 2025年 5月 2日 12:23 这叫residue number system,早就有人用了。但是复杂度不可能是O(n)。你的公式中:

(a*15 + b*21 + c*70) mod 105.

70很接近105. 也就是说如果N=2n, 你的复杂度可能接近2n
如果在多进制里面计算,不转换回十进制就没有这个cost

比如大量的乘法
¡qooq ƃᴉq ɐ ǝɹɐ no⅄
FoxMe(令狐)
著名点评
著名点评
帖子互动: 125
帖子: 5079
注册时间: 2022年 7月 26日 16:46

#11 Re: 多进制数的乘法时间复杂度O(n)?

帖子 FoxMe(令狐) »

哦,有点道理。瓶颈在CRT,如果一直在多进制里面计算,就不用转换。

如果数据是十进制的,如果只是开始结尾做一次,可能有好处?但是求余数是通过除法实现的,除法的复杂度和乘法是一样的吧?
ɓuoɥɔɓuɐnɥ 写了: 2025年 5月 2日 12:26 如果在多进制里面计算,不转换回十进制就没有这个cost

比如大量的乘法
头像
ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主
见习点评
见习点评
帖子互动: 127
帖子: 1320
注册时间: 2024年 9月 27日 23:57

#12 Re: 多进制数的乘法时间复杂度O(n)?

帖子 ɓuoɥɔɓuɐnɥ(poɓᴉuɯO pǝʇɹǝʌuI)楼主 »

FoxMe 写了: 2025年 5月 2日 12:45 哦,有点道理。瓶颈在CRT,如果一直在多进制里面计算,就不用转换。

如果数据是十进制的,如果只是开始结尾做一次,可能有好处?但是求余数是通过除法实现的,除法的复杂度和乘法是一样的吧?
完了,求余似乎是硬伤

这样看,把n*n的乘法计算量转换成n_1*n_1 + n_2*n_2 + ... n_m*n_m, where sum(n_i) = n的小块乘法
¡qooq ƃᴉq ɐ ǝɹɐ no⅄
forecasting
著名点评
著名点评
帖子互动: 284
帖子: 3983
注册时间: 2023年 4月 17日 08:26

#13 Re: 多进制数的乘法时间复杂度O(n)?

帖子 forecasting »

本不想回复,今天闲,就说两句消磨时间。

有计算理论的常识就知道,这不是个问题,计算复杂度不变,除非你改变进制为递归序列,但映射输入为另一个递归序列-base进制,再映射输出回来,所降低的复杂度也得加上去,还是没变,甚至更复杂。
三值逻辑或n值逻辑与二值逻辑不同,但是这种不属于进制不同。
回复

回到 “STEM”