在这里,我们将学习如何高效地生成所有小于n的素数。这种方法将使用威尔逊定理。根据该定理,如果一个数k是素数,则((k - 1)! + 1) mod k 将为 0。让我们看看这个算法的思路。这个思路不能直接在C或C++之类的语言中使用,因为它不支持大整数。阶乘会产生很大的数字。算法genAllPrime(n)开始 fact := 1 for i in range 2 to n-1, do fact ... 阅读更多
在这里,我们将看到一种生成从1到n的二进制数的有趣方法。这里我们使用队列。最初,队列将包含第一个二进制数“1”。现在,重复从队列中删除元素,打印它,并在队首元素的末尾追加0,并在队首元素的末尾追加1,并将它们插入到队列中。让我们看看算法来了解其思路。算法genBinaryNumbers(n)开始 定义空队列。 将1插入队列 while n不为0, do 从队列中删除元素并将其存储... 阅读更多
在本节中,我们将学习如何生成任意长度的所有可能的字符串,这将采用字符的每个组合来构成字符串。例如,如果字符串是ABC,则它将生成 - {A, B, C, AB, BA, BC, CB, CA, AC, ABC, ACB, BAC, BCA, CAB, CBA}让我们看看示例来了解其思路。算法printAllString(str)开始 n := 字符串str的长度 count为2^n – 1 对于每个数字0到count,执行 sub_str := 空字符串 for j in range 0 to n, do ... 阅读更多
在这里,我们将看到n位(n由用户给出)的所有可能的二进制数,其中每一半的和相同。例如,如果数字是10001,则10和01相同,因为它们的和相同,并且它们位于不同的半部分。在这里,我们将生成所有此类型的数字。算法genAllBinEqualSumHalf(n, left, right, diff)left和right最初为空,diff保存left和right之间的差值开始 if n为0,则 if diff为0,则 打印left + right ... 阅读更多
在这里,我们将看到一个简单的问题。我们必须在给定列表中找到所有本质上是回文数的数字。方法很简单,从列表中获取每个数字并检查它是否是回文数,然后打印该数字。算法getAllPalindrome(arr, n)开始 对于arr中的每个元素e,执行 if e是回文数,则 打印e end if done结束示例#include #include using namespace std; bool isPalindrome(int n){ int reverse = 0, t; t = n; while (t != 0){ ... 阅读更多