Questions tagged «integers»

有关整数的属性,使用整数和算法的问题。

2
用于“求和”一组和的高效算法
给定自然数X的多集,请考虑所有可能总和的集合: sums(X)={∑i∈Ai|A⊆X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} 例如,而 。sums({1,5})={0,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\} 计算逆运算最有效的算法是什么(以输入和的大小来衡量)?具体来说,可以有效地计算以下任何一项: 给定集是否为有效的和集。(例如,有效,而无效。){0,1,2}{0,1,2}\left\{0,1,2\right\}{0,1,3}{0,1,3}\left\{0,1,3\right\} 一个累加到给定集合的多重集。 在最小的多重集,总结到给定。(例如,和总和为但前者较小。){ 1 ,1 ,1 } { 0 ,1 ,2 ,3 }{1,2}{1,2}\left\{1,2\right\}{1,1,1}{1,1,1}\left\{1,1,1\right\}{0,1,2,3}{0,1,2,3}\left\{0,1,2,3\right\}

3
给定体积以最小化表面积的算法
考虑以下算法任务: 输入:一个正整数nnn,连同它的因式分解 查找:正整数x,y,zx,y,zx,y,z,最大限度地减少xy+yz+xzxy+yz+xzxy+yz+xz,受到了限制xyz=nxyz=nxyz=n 这个问题的复杂性是什么?有多项式时间算法吗?是NP难吗? 这个问题基本上是在问:在体积为nnn,尺寸均为整数的所有矩形实体中,表面积最小的是哪一个? 这个问题是由丹·迈耶(Dan Meyer)提出的,题为“ 1,000名数学老师无法解决的数学问题”。到目前为止,与他一起工作的数学老师都没有找到解决这个问题的合理算法。在他的上下文中,“合理”的定义有点不精确,但是作为计算机科学家,我们可以提出一个关于此问题的复杂性的更精确的问题。 显而易见的方法是枚举所有可能性x,y,zx,y,zx,y,z,但这需要花费指数时间。丹·迈尔(Dan Meyer)博客的评论者提出了许多有效的候选算法,不幸的是,所有这些算法都被证明是不正确的。马丁·斯特劳斯( Martin Strauss)表示,这个问题似乎让人联想到3分区,但我看不到这种减少。 让我也清除一些我在评论/答案中看到的误解: 不能从3分区通过简单地更换每个数字减少qqq与其功率2q2q2^q,由于这两个问题的目标函数是不同的。明显的减少根本行不通。 最优解涉及选择x,y,zx,y,zx,y,z中的一个作为nnn与3的最接近除数是不正确的√n−−√3n3\sqrt[3]{n}。我看到多个人都认为情况确实如此,但实际上这是不正确的。Dan Meyer博客文章已对此进行了证实。例如,考虑n=68n=68n=68;68−−√3≈4683≈4\sqrt[3]{68} \approx 4和4将68,所以你可能会认为,至少一个x,y,zx,y,zx,y,z应为4; 但是,这是不正确的。最佳解是x=2x=2x=2,y=2y=2y=2,z=17z=17z=17。另一个反是n=222n=222n=222,222−−−√3≈62223≈6\sqrt[3]{222}\approx 6,但最佳的解决方案是x=37X=37x=37,y=3ÿ=3y=3,z=2ž=2z=2。(这可能是真实的,对于所有nñn,最优解决方案涉及制造在至少一个x,y,zX,ÿ,žx,y,z等于任一的最小除数nñn大于n−−√3ñ3\sqrt[3]{n} 或最大除数nñn小于n−−√3ñ3\sqrt[3]{n}我现在没有反例-但是如果您认为这句话是正确的,那就需要证明。您绝对不能认为这是真的。) “使的大小相同”似乎并不一定在所有情况下都能产生最佳答案。有关反例,请参见Dan Meyer的博客文章。或者,至少对于短语“使其大小大致相同”的一些合理解释,有一些反例表明该策略实际上并不是最佳的。如果您想尝试某种策略,请确保您准确地声明索赔,然后提供仔细的数学证明。x,y,zX,ÿ,žx,y,z 运行时间不是多项式。为了使该问题出现在P中,运行时间必须是输入长度的多项式。输入的长度类似于lg n,而不是n。可以使明显的蛮力算法在O (n 3)或O (n 2)时间中运行,但是在lg n中是指数式的,因此算作指数时间算法。因此,这没有帮助。O(n3)Ø(ñ3)O(n^3)lgnlg⁡ñ\lg nnñnO(n3)Ø(ñ3)O(n^3)O(n2)Ø(ñ2)O(n^2)lgnlg⁡ñ\lg n

3
计算素数模的阶乘最有效的方法是什么?
您知道有什么算法可以有效地计算模后阶乘吗? 例如,我要编程: for(i=0; i<5; i++) sum += factorial(p-i) % p; 但是,p直接应用阶乘是一个很大的数字(素数)。(p≤108)(p≤108)(p \leq 10^ 8) 在Python中,此任务确实很容易,但是我真的很想知道如何优化。



1
溢出安全求和
假设我给了固定宽度的整数(即它们适合宽度w的寄存器),a_1,a_2,\点a_n,使得它们的和a_1 + a_2 + \ dots + a_n = S也适合宽度w的寄存器。nnna 1,a 2,… a n a 1 + a 2 + ⋯ + a n = S wwwwa1,a2,…ana1,a2,…ana_1, a_2, \dots a_na1+a2+⋯+an=Sa1+a2+⋯+an=Sa_1 + a_2 + \dots + a_n = Swww 在我看来,我们总是可以将数字置换为b1,b2,…bnb1,b2,…bnb_1, b_2, \dots b_n,以便每个前缀和Si=b1+b2+⋯+biSi=b1+b2+⋯+biS_i = b_1 + b_2 + \dots + b_i也适合宽度为w的寄存器www。 …

4
比较有理数
给定a,b,c,d∈Na,b,c,d∈Na,b,c,d \in \mathbb N和b,d∉{0}b,d∉{0}b,d \notin \{0\}, ab&lt;cd⟺ad&lt;cbab&lt;cd⟺ad&lt;cb \begin{eqnarray*} \frac a b < \frac c d &\iff& ad < cb \end{eqnarray*} 我的问题是: 给定a,b,c,da,b,c,da,b,c,d 假设我们可以决定x&lt;y∈Zx&lt;y∈Zx < y \in \mathbb Z在O(|x|+|y|)O(|x|+|y|)\mathcal{O}(|x| +|y|),是有决定的任何方式ad&lt;cbad&lt;cbad<cb,而无需预形成的乘法(或分割),a⋅da⋅da\cdot d和c⋅bc⋅bc \cdot b。还是有某种证明是不可能的。 有没有一种比分母相乘更快的方法来比较有理数。

3
多集的数量,这样从1到
我的问题。给定,我想计算有效多集S的数量。多重集S在以下情况下有效nnnSSSSSS 的元素之和为n,并且SSSnnn 从到n的每个数字都可以唯一地表示为S的某些元素的总和。111nnnSSS 例。 例如,如果然后{ 1 ,1 ,1 ,1 ,1 } ,{ 1 ,2 ,2 } ,{ 1 ,1 ,3 }是有效的。n=5n=5n=5{1,1,1,1,1},{1,2,2},{1,1,3}{1,1,1,1,1},{1,2,2},{1,1,3}\{1,1,1,1,1\}, \{1,2,2\}, \{1,1,3\} 然而,是无效的,因为2可以通过形成两个{ 1 ,1 }和{ 2 }(即,2可以被表示为两个2 = 1 + 1和2 = 2) ,因此第二个条件不成立。类似地3能够通过形成{ 2 ,1 }和{ 1 ,1 ,1 }。S={1,1,1,2}S={1,1,1,2}S=\{1,1,1,2\}{1,1}{1,1}\{1,1\}{2}{2}\{2\}2=1+12=1+12=1+12=22=22=2{2,1}{2,1}\{2,1\}{1,1,1}{1,1,1}\{1,1,1\} }也无效,因为从所有数字 1至 5都可以被唯一制成,但的元素之和小号不是 5。S={1,2,4S={1,2,4S=\{1,2,4111555SSS555 我试图为这个问题找到一个好的算法已经有一段时间了,但是无法解决。它来自codechef。我已经看到了一些提交的解决方案,但是仍然无法获得解决问题的逻辑。注意:问题的时限为10秒,n&lt;109n&lt;109n<10^9 对于多集,我将使用符号a i …


3
什么数据结构可以有效地存储整数范围?
我需要保留一个范围在0到65535之间的整数的集合,以便可以快速执行以下操作: 插入一个新的整数 插入一系列连续的整数 删除整数 删除整数以下的所有整数 测试是否存在整数 我的数据具有以下特性:它通常在集合中包含整数整数。例如,集合在某个时间点可能是: { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } 最简单的方法就是使用像C ++ std :: set这样的平衡二叉树,但是,使用它,我没有利用我经常会有大量数字的事实。也许最好存储一系列范围?但这意味着,如果要删除范围中间的整数,则需要将其分解;如果要填充两个范围之间的空格,则必须将其合并在一起。 是否存在任何适合此问题的现有数据结构?


5
仿射函数值的语言
写为的十进制扩展(不带前导)。令和为整数,其中。考虑的倍数的扩张小数的语言加上一个常数:n¯n¯\bar nnnn0aaabbba&gt;0a&gt;0a > 0aaa M={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈N}M={ax+b¯∣x∈N}M = \{ \overline{a\,x+b} \mid x\in\mathbb{N} \} 是正常吗?上下文无关?MMM (与仿射函数图的语言对比) 我认为这将是一个不错的家庭作业问题,因此从一两个提示开始的答案不仅说明了如何解决问题,而且还解释了如何决定使用哪种技术。

1
存在什么算法可以求解自然数线性系统?
我在看以下问题: 给定自然数维向量和一些输入向量,是与自然数系数的线性组合吗?v 1,… ,v m u u v iñnnv1个,… ,v米v1,…,vmv_1, \ldots, v_müuuüuuv一世viv_i 即是否有一些,其中? Ù = 吨1 v 1 + ⋯ + 吨米v 米Ť1个,… ,t米∈ ñt1,…,tm∈Nt_1, \ldots, t_m \in \mathbb{N}u = t1个v1个+ ⋯ + t米v米u=t1v1+⋯+tmvmu = t_1 v_1 + \dots + t_m v_m 显然,此问题的实数版本可以使用高斯消除法解决。我想知道,是否已研究此问题的整数版本?有什么算法可以解决呢? 请注意,这是使用自然数,而不是模数,因此这与中国余数定理和类似系统有些不同。另外,它似乎与Diophantine方程有关,但是我想知道在只考虑非负整数的情况下该怎么做?这也使人联想到多维子集和问题,可以使我们对每个向量进行任意数量的复制。似乎还与测试是否是生成的晶格的元素有关,除了这里我们只允许使用非负系数的线性组合。üuuv1个,… ,v米v1个,…,v米v_1,\dots,v_m 对于任何感兴趣的人,这都是通过查看Parikh向量是否在线性集中来实现的,就像Parikh定理一样。 特别是,我对一种可以仅使用自然数运算来解决问题的算法感兴趣,而不必使用实数/浮点数。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.