我正在解决这个问题(问题一).声明是:
该集合中{1, 2, 3, ..., n}
有多少子集是互质的?如果每个元素的每两个都是互质的,则一组整数称为互质.如果它们的最大公约数等于1,则两个整数是互质的.
输入
第一行输入包含两个整数n
和m
(1 <= n <= 3000, 1 <= m <= 10^9 + 9
)
产量
输出{1, 2, 3, ..., n}
模数的互质子集的数量m
.
例
输入:4 7输出:5
有12点质数的子集{1,2,3,4}
:{}
,{1}
,{2}
,{3}
,{4}
,{1,2}
,{1,3}
,{1,4}
,{2,3}
,{3,4}
,{1,2,3}
,{1,3,4}
.
我认为可以通过使用素数来解决.(跟踪我们是否使用了每个素数)..但我不确定.
我可以得到一些解决这个任务的提示吗?
抱歉,长标题:)
在这个问题中,我们有S
长度的n
字符串T
和长度的字符串m
.我们可以在时间复杂度O(n + m)中检查字符串S
的子序列T
.这很简单.
我很好奇:如果我们可以删除最多K
连续的字符怎么办?例如,如果K = 2
,我们可以"ab"
从"accb"
,但不从"abcccb"
.我想检查它是否可能非常快.
我只能发现很明显O(nm)
:检查字符串S
和字符串中的每个后缀对是否可能T
.我认为也许贪婪的算法是可能的,但如果K = 2
,情况S = "abc"
并且T = "ababbc"
是一个反例.
有没有解决这个问题的快速解决方案?
最近,我读到了这一点,并且惊讶于联合和查找算法的时间复杂性与路径压缩一致O((m+n) log n)
,m
"查找"查询的数量在哪里,是n
"合并"查询的数量.
我对这种复杂性感兴趣,(因为我通常没有排名实现这个算法,即使我按排名颠倒应用联合,性能也不差!)并试图找到一个可以使时间复杂度的例子.但是由于路径压缩的强大功能,它真的很难......
有没有可以实现的例子Omega((m+n) log n)
,或者这种复杂性只是理论上的,不实用的?
根据维基百科,线性同余生成器由下面的递归关系定义:
X(n) = {a.X(n-1) + c} mod m
Run Code Online (Sandbox Code Playgroud)
其中0 < m
,0 <= a < m
,0 <= c < m
,0 <= X(0) < m
是指定生成整型常量.
如果价值a
,c
,m
,X(0)
,和n
给出,我能确定k
个最小值(1 <= k <= n
的)设置{X(0), X(1), ..., X(n)}
非常快?(比O(n)
基于排序算法的更快)