光滑数(smooth number),或译脆数:ix,是一个可以约数分解为小素数乘积的正整数。光滑数一词是是伦纳德·阿德曼所提出。光滑数在以约数分解为基础的密码学中扮演重要角色。
若一正整数的素因数均不大于B,此整数即为B-光滑数。例如1620的约数分解为22 × 34 × 5,素因数均不大于5,因此1620是5-光滑数。
10和12的约数分解分别为2 × 5和22 × 3,二者素因数也都不大于5,因此二者均是是5-光滑数,虽然其素因数未包括不大于5的所有素数,但仍然可以是5-光滑数。
5-光滑数常称为正规数或汉明数(Hamming numbers)。7-光滑数有时会称为“谦虚数”或“高合成数”,不过后者会和以约数个数来定义的高合成数混淆。
B-光滑数的B不一定要是素数,例如上述举例的10和12不但是5-光滑数,也是6-光滑数(素因数都不大于6)。一般而言会选择B为素数的B-光滑数,但B也可以是合数。一正整数为B-光滑数当且仅当正整数为p-光滑数,且p是小于等于B的最大素数。
有些快速傅里叶变换算法中会用到光滑数,例如库利-图基快速傅里叶变换算法会将问题一直分解为较小的问题,其大小为原问题大小的约数,若原问题大小是原问题大小,原问题可以分解为许多很小的问题,此情形有有快速的算法,若大小是较大的素数,就要应用像是Chirp-Z 转换之类效率较差的算法。
5-光滑数〈或称为正规数〉在巴比伦数学中有重要的角色,在音乐理论中也很重要。有一个函数编程语言的问题就是要产生正规数。
密码学中也有应用光滑数。虽然大部分的密码学都会用到密码分析(已知最快的约数分解算法),但VSH(英语:Very smooth hash)杂凑函数利用光滑数来取得可证安全加密散列函数(英语:Provably secure cryptographic hash function)。
令的-光滑数的个数(de Bruijn函数)。
若为定值且数值很小,可以用下式估计= log / log :因此, = ,则:
其中的素数幂次 为-幂次光滑数:
例如,243251为5-光滑数,但不是5-幂次光滑数。因为其最大的素数幂次为24,该数为16-幂次光滑数,也是17-幂次光滑数,18-幂次光滑数……。
数论中有用到-光滑数及-幂次光滑数。例如波拉德p-1算法(英语:Pollard's p − 1 algorithm),这类算法一般会应用在光滑数中,但不会特别标示光滑数的是多少。此时的需是一个较小的整数,若增加,算法的效率就会迅速的变差。例如计算离散对数的Pohlig–Hellman算法(英语:Pohlig–Hellman algorithm)的时间复杂度是O(1/2)。
整数数列线上大全(OEIS)中有包括以下B较小的B-光滑数: