我正在编程质数生成器(最多200位)在Pascal使用的。
我已经实现了多个步骤,但我被模幂运算部分卡住了。我选择了,其中(我假设)我必须实现A mod B,其中A和B都是(在最坏的情况下是200位)。为了计算模数,我必须实现最多200位的2个数的除法。我在一个数组中重新表示我的长整数,其中每个元素都是一个数字(0-9)。
我已经在谷歌上搜索过了,但我没有找到任何适合我的算法(这不会花费很多时间来实现)。所以我在这里询问是否有人有这方面的经验。我不一定要成为最快的算法,但它不应该是“愚蠢的”,因为欧几里德除法需要数年时间,而且应该很容易实现。我不想使用任何库(纯pascal)
我需要一种简单的方法来找出变量originalnumber是否是2的幂。我宁愿避免使用函数,特别是因为我被参数弄糊涂了,所以像除法这样的东西是有用的
这是Python 3中的。
类似于如何发现一个数字可以被另一个数字整除将是有用的。
一开始我有(只是我要找的东西的例子):
if originalnumber % 2 == 0:
print("is power of 2")
else:
print("is not power of 2")
下面是将一个数字乘以给定幂的代码:
#include <stdio.h>
int foo(int m, int k) {
if (k == 0) {
return 1;
} else if (k % 2 != 0) {
return m * foo(m, k - 1);
} else {
int p = foo(m, k / 2);
return p * p;
}
}
int main() {
int m, k;
while (scanf("%d %d"
我有这个reverse算法的实现:
function reverse(a) {
let left = 0;
let right = a.length - 1;
while (left < right) {
let tmp = a[left];
a[left] = a[right];
a[right] = tmp;
left += 1;
right -= 1;
}
return a;
}
对于任何n元素数组,循环都会运行n/2次。但是我到处读到reverse算法的复
我有两个数组
a of length n
b of length m
现在,我想找到这两个数组共有的所有元素。
算法
构建由A的所有元素组成的散列映射
现在,对于B中的每个元素x,检查元素x是否存在于hashmap中。
分析总体时间复杂度
用于构建hashmap O(n) 的第二步复杂度为O(m)
所以总体上是O(m+n)。我说得对吗?
什么是O(m+n) =?什么时候m大,反之亦然?
我想知道如何确定用伪代码编写的算法的运行时间,以便我能够熟悉运行时间。例如,如何知道比较两个数组以确定它们是否相同的算法的运行时间?
数组1= 1,5,3,2,10,12数组2= 3,2,1,5,10,12,因此这两个数组不同,因为它们的排序不同。
我的伪代码是:
1)将当前指针设置为第一个数组中的第一个数字
2)将第二个指针设置为第二个数组中的第一个数字
3) while (当前指针!=“")与其他数组中相同位置的元素进行比较
4) if (current pointer == second pointer)
move current pointer to next number
我正在计算这个算法的时间复杂度,这个算法决定了一个正整数N是否可以表示为x^y。这个算法的作者是。
// Returns true if n can be written as x^y
bool isPower(unsigned int n)
{
// Base case
if (n <= 1) return true;
// Try all numbers from 2 to sqrt(n) as base
for (int x=2; x<=sqrt(n); x++)
{
unsigned p = x;
通常,当分析算法的运行时间时,我处理的是影响运行时间的单个输入。我正在尝试理解当有2个或更多的输入影响运行时间时,如何表示T(n)。 例如,在最坏情况下的线性搜索中: function LinearSearch(arr, N, x)
for (i = 0; i < N; i++) ---> C1*N + C2
if arr[i] = x ---> C3*N
return true
return false --->
您将获得int[][] lists (排序int-数组的数组)。你要把所有这些都合并。时间的复杂性是多少?
我尝试过这样做:将数组分割成对,并将所有对并行合并。
public static List<Integer> merge(int[][] array) throws InterruptedException {
// number of array remaining to be merged
int remaining = array.length;
while (remaining > 2) {
我已经为下面的问题写了一段代码:给定一个数字列表"nums“和一个数字" k ",返回列表中的任何两个数字是否相加为k。 约束:n ≤ 100,000其中"n“是"nums”的长度我写的代码如下: class Solution:
def solve(self, nums, k):
a=0
if len(nums)<= 100000:
for i in range(len(nums)):
for j in range(len(nums)):
if i !=j:
这段代码的时间复杂度是多少:
for (i=1 to n)
for (j=1 to i^2)
if ((j mod i)==0)
for (k=1 to j)
write ("*");
我发现i,j和k之间的关系:,例如,n=4,所以:
i j k
1 1-1 1 k run for 1time
2 1-4 1,2,3,4 k run for 2 and 4 times
3 1-9
我在网上找到了这个example problem,我就是不明白作者是如何得出这个结论的。 sum1 = 0;
for(k=1; k<=n; k*=2) // Do log n times
for (j=1; j<=n; j++) // Do n times
sum1++;`
sum2 = 0;
for (k=1; k<=n; k*=2) // Do log n times
for (j=1; j<=k; j++) // Do k times
sum2++; 我知道第一个循环的运行时间是O( n ) = nlog(n
我正在尝试设计一种算法来查找数组中两个相同元素的索引。输入是一个数组,输出是两个索引i&j,使得arrayi=arrayj。时间复杂度必须为O(nlogn)。
这是我尝试过的
let i=0 to size_of_array{
let j=i+1 to size_of_array{
if array[j]=array[i]{
print(i, j)
}
}
}
嵌套循环是O(n^2),但如果我尝试这样设计。时间复杂度是多少?
N是数组的大小,我的实现将运行O(n(n-1)+(n-2)+(n-3)....+1)次。它
我正在比较确定一个数字是否是素数的两种算法。我看到了时间复杂度的上限,但我无法理解两者之间的时间复杂度差异,尽管在实践中,一种算法比另一种算法更快。
这个伪码以指数时间运行,O(2^n):
Prime(n):
for i in range(2, n-1)
if n % i == 0
return False
return True
与前面的示例相比,这个伪代码运行的时间缩短了一半,但是我很难理解时间复杂度是否仍然是O(2^n):
Prime(n):
for i in range(2, (n/2+1))
if n %
我需要检查数组中是否存在一个数字和它的双。这个代码使用set来解决它。然而,我不确定时间复杂度是否优于O(N^2)。我使用for loop和if 2*item in s,如下所示。我们不是要知道条目是否在数组中,而是使用另一个O(N)。这意味着O(N^2)的总数?如果它是最优的,我如何在C中实现代码而不使用nested loop
非常感谢!
def checkIfExist(arr]) -> bool:
s = set(array)
for item in s:
if 2 * item in s and item != 0:
r
我正在研究一个修改的合并排序算法,该算法使用类似的过程来合并两个排序数组,但是我希望合并√n排序数组的√n大小。它将从一个大小为n的数组开始,然后递归地划分为如上所述的√n子问题。所使用的算法如下:
1.) Divide array of n elements into √n pieces
2.) Pass elements back into method for recursion
3.) Compare pieces from step 1
4.) Merge components together to form sorted array
我相当肯定这是正确的算法,但我不知道如何找到
下面是我简单地实现的代码。for循环的复杂度应为O(n)。我只是不知道内部while循环的时间复杂性。
int x,n; // Inputted by the user.
for (int i=0; i<n; i++)
{
int done=0;
if (Condition)
{
while (done < x)
{
done++; // Based on a lot of operations
}
}
}
如果你想的话,我可以把所有的代码都贴出来。(预先谢谢: