我在这方面做了很多工作,但找不到更大测试用例的答案
在数学中,二项式系数是在二项式定理中作为系数出现的一系列正整数。C(n,k)表示从n个不同对象中选择k个对象的方法的数量。
然而,当n和k太大时,我们通常在通过素数P进行模运算后保存它们。请计算n在通过P模运算后有多少二项式系数变为0。
第一个输入是一个整数T,即测试用例的数量。
以下每一条T线都包含2个整数,n和素数P。
对于每个测试用例,输出一行包含\tbinom NK的数量(0
3
2 2
3 2
4 3
1
0
1
我用二项式系数中的余数定理完成了这项工作
#C(n,m) mod p
#n=l*p+t
#m=m*p+s
#then C(n,r) mod p=0 when (t<s or t=0)
inp1 = raw_input()
N=int(inp1)
result=[]
for i in range(N):
inp = raw_input()
a, b = [long(x) for x in inp.split(' ')]
j=0
#n=lp+t
t=a%b
t=t+1
l=a/b
j=l*(b-t)
result.append(j)
for i in range(N):
print result[i]
上述条件对于较小的数是满足的
样本测试用例
n=18794630774601781017426704938831913907435978269230795331996679039914346399046250032752062869664969026409717407691286722246746310051635510258172010540705068068062855577739018819952185016092141574603857575517389685582264304970416367431857952154025664646411119006572746826261266043520236417734545427770334990400306682949871260040370515062243982543271073443613028133844603853807066311479739789908983610180228625059956919930500586048799830730348503994503184106117058
p=177080341
我的输出是
2296508200406431043037217853758906667313789305876262916681342008001095232916608835588093082038358975456171743147798282523487485386336553910277635713985851142371010771392102277877640275384064735398164190968282400640398659343189330639672472613876688344609533340662724884373078840434716174167873375700938597411315754265893890741730938202927739246687866166994143001482839656000969674716959277820008958538229366474207686428750934149471409162993083541475267772950721250234982686128039722553219836725588488
预期产出为
18794630773460178101742635959946548665553041135822283621364103266511586625905046107130878283695016799933475657268010472422112556606280021574002866456544310584537519228161286450725015989697306855581489155139723025246780552510467580791551824827637581156204185887378181074365453150481221030356075255000460025095384537510111086396988416046942446776262625161326885418101128327416784858513888616089287333560469336094431461981368825028447505354473183546488856594449627370807707483671453574074503184106117059
你的公式失效了。
你在计算l*(p-t-1)。
如果有p^2,p^3等的因子,这个公式就不起作用了
对于较小的数字,尝试n=10,p=3来了解我在说什么。你的计算将返回3个r值,其中10 C r mod 3=0,但实际上有7个。
你可以从另一端看:有多少nCr不能被p整除?这有一个相当简单的公式。
二项式系数nCr
由下式给出
nCr = n! / (r! * (n-r)!)
因此,在nCr
中p
的多重性v_p(nCr)
——在nCr
的素因式分解中p
的指数是
v_p(nCr) = v_p(n!) - v_p(r!) - v_p((n-r)!)
p
inn
可以很容易地确定,一个众所周知的计算方法是
v_p(n!) = ∑ floor(n/p^k)
k > 0
如果你考虑到
p
扩展的n
,看看这个公式,你会发现
v_p(n!) = (n - σ_p(n)) / (p - 1)
其中,
p的位数之和。因此σ_p(k)
是k
表示的基
v_p(nCr) = (n - σ_p(n) - r + σ_p(r) - (n-r) + σ_p(n-r)) / (p - 1)
= (σ_p(r) + σ_p(n-r) - σ_p(n)) / (p - 1)
nCr
不可被素数p
整除当且仅当r
和n-r
的加法没有进位基p
。
因为这正是当σp(ab)=σp(a)σp(b)
时。当A
和b
的相应数字之和(如果已经为较低有效数字生成进位,则可能加上进位)为
在base
p
中,我们有一个无进位加法n=r(n-r)
,如果对于n
的base-p
展开中的每个数字d_k
,则的相应数字>r
小于或等于d_k
。r
的数字的允许选择是独立的,因此总数是单个数字的选择计数的乘积。
不能被素数p整除的nCr数是
ND(n,p) = ∏(d_k + 1)
其中
d_k
是n
的基p
展开中的数字,
m
n = ∑ d_k * p^k
k=0
由于给定的
n
存在n1
(非零)二项式系数nCr
,因此可被p
整除的(非零)二项式系数的数量为
m
n + 1 - ∏ (d_k + 1)
k=0
用上面的
p
扩展n
。
使用Michael的例子
n=10
,p=3
,
10 = 1*3^0 + 0*3^1 + 1*3^2
因此有
(11)*(01)*(11)=4
系数10Cr
不可被3整除和101-4=7
可被3整除。
def divisibleCoefficients(n,p):
m, nondiv = n, 1
while m > 0:
nondiv = nondiv * ((m % p) + 1)
m = m // p
return (n + 1 - nondiv)
Appium 支持 WebDriver 定位策略的子集: 通过 "class" 查找 (例如, UI 组件的类型) 通过 "xpath" 查找 (例如, 一个元素的路径以抽象的方式去表达,具有一定的约束) 你可以查看关于以上的列表,选择器策略 (English)。 Appium 还额外支持部分 Mobile JSON Wire Protocol 的定位策略。 -ios predicate stri
可能重复: 查找字符串中最长的重复序列 我正在解决一个问题,我需要找到重复最多的模式。 为了简单和方便,请考虑这个字符串: 重复次数最多的序列(例如,最初考虑字符串长度大于3个字符)是“Lorem Ipsum”。“Lorem”和“Ipsum”当然也重复相同的次数,但如果它们重复相同的次数,则较长的字符串优先于较短的字符串。 什么样的算法可以有效地找到这种模式,最好是在Python中?
目前 SOFATracer 提供了两种采样模式,一种是基于 BitSet 实现的基于固定采样率的采样模式;另外一种是提供给用户自定义实现采样的采样模式。下面通过案例来演示如何使用。 本示例基于 tracer-sample-with-springmvc 工程;除 application.properties 之外,其他均相同。 基于固定采样率的采样模式 在 application.propertie
由两部分组成的问题: 试图确定600851475143的最大主因子,我在网上发现这个程序似乎有效。问题是,我很难弄清楚它到底是如何工作的,尽管我了解程序的基本功能。此外,我希望你能解释一下你可能知道的寻找素数因子的任何方法,也许不需要测试每个数字,以及你的方法是如何工作的 这是我在网上找到的素因式分解代码[注:此代码不正确。有关更好的代码,请参见下面Stefan的回答。]:
我试图解决这个面试问题。我的代码针对测试用例运行,但对于所有实际输入测试用例都失败。我努力寻找错误,但无法做到。请在问题下方找到我的代码 鲍勃非常喜欢分类。他总是在想新的方法来对数组进行排序。他的朋友拉姆给了他一项艰巨的任务。他给了Bob一个数组和一个整数K。挑战是在最多K-swap之后生成字典序最小数组。只能交换连续的元素对。帮助Bob在最多K-swap之后返回字典序最小数组。 输入:第一行包含
我正在尝试在MATLAB中对图像中的一个物体进行形状分析(特别是)。为此,我找到了边界像素。对于每个边界像素,我使用8邻域理论计算它的邻域。现在我正在计算一个点与它的唯一邻居的切线(取决于我如何选择顺时针或其他方式)。如果每个像素正好有两个邻居,我的算法就能正常工作。对于本图所示的形状(顺序为9 X 15像素)。 但如果一个像素的邻域超过2个,那么我的算法就会混乱。例如,如(顺序为9 X 15像素