Algorithm 极大数模素数

Algorithm 极大数模素数,algorithm,primes,mathematical-optimization,largenumber,modular-arithmetic,Algorithm,Primes,Mathematical Optimization,Largenumber,Modular Arithmetic,在一次采访中,我被问到以下问题: 如何解决此问题:((3000000!)/(30!)^100000)%(任何素数) 我用蛮力为C程序编写了相同的代码,但我确信他没有预料到这一点。对解决方案有什么建议吗?3000000!=1*2*3*4*5*.8*.16*.24*.32*.40*.64*.300000 我们能数一数结果中2的数目吗?是的,2的每一次幂对其倍数贡献一个2。所以n的因式分解中2s的总数!是n/2+n/4+n/8+n/16+n/32+…,其中/是整数除法,当项大于0时求和: fnf=--

在一次采访中,我被问到以下问题:

如何解决此问题:((3000000!)/(30!)^100000)%(任何素数)


我用蛮力为C程序编写了相同的代码,但我确信他没有预料到这一点。对解决方案有什么建议吗?

3000000!=1*2*3*4*5*.8*.16*.24*.32*.40*.64*.300000

我们能数一数结果中2的数目吗?是的,2的每一次幂对其倍数贡献一个2。所以n的因式分解中2s的总数!是
n/2+n/4+n/8+n/16+n/32+…
,其中
/
是整数除法,当项大于0时求和:

fnf=--n中的'f'因子数`
总和takeWhile(>0)。尾巴。迭代(`div`f)$n
(编写伪代码)。当
f*f
时,将有多个条目进行汇总。对于较大的
f
s,只有一个条目要求和,即<代码>n`div`f

所以,
n被发现为

factfact n=--n的因式分解!n的as[(p,k)…]生产p_i^k_i
让

(ps,qs)=span(\p->p*p如果“^”表示“提升到权力”,那么我认为3E6!/30!^1E5小于1。如果你将“/”解释为“整数除法”,那么我们得到0,所以在模后仍然是0。同意,但面试官让我对其进行编码。可能他希望我提出一些定理。答案-->10打印“0”。然后是关于原因的白板讨论。我认为答案与卢卡斯定理有关。目前的探索与此相同。@redtuna你认为错误,
3e6!
的数字相同,但因子比
30!*1e5
大得多,所以商不是零。如果你能指出目前最相关的答案,这将非常有用对于p>3000000,使用模幂函数mod p(这个概念对我来说是新的)。@Gaurav try.或@Gaurav您可以在页面右上角的搜索框中键入“模乘”或“模幂函数”。出现的第一个(1088)看起来也不错。