在以一元/二进制编码时检查数字是否为素数

时间:2012-04-24 17:42:07

标签: algorithm primes

以下算法检查数字是否为素数:

Given a number n,loop over all numbers smaller than n and check whether they divide n. 
If one of them divides n, answer no. Otherwise, answer yes.

现在,在以下两种情况下,我必须分析算法执行的除法运算的数量作为其输入长度的函数:

1)数字以一元编码(即4为1111)。如何显示分割数是多项式的?

2)数字以二进制编码(即4为100)。如何显示分割数是指数?

2 个答案:

答案 0 :(得分:1)

假设我们将n 1串在一起(标注为1^n)。 n显然是我们输入的长度。我们将所有整数从11111,...,1^(n-1)分成1^n。作为1^n的函数,您将分成多少个数字n?这是多项式吗?

请注意,log_2(x)x的日志基数2)位代表x,大约用二进制表示。另请注意,我们将执行x-2分部(2345,...,x-1将被分割进入x)。因此,对于log_2(x)位,我们使用x-2个分区。相反,假设我们让n成为我们输入的大小。所以我们有n = log_2(x)。那么,就n的函数而言,我们会采取多少分歧?

答案 1 :(得分:0)

提示:

将问题大小n定义为数字的(二进制|一元)表示中的位数。

现在考虑一下您可以用n数字编码多少个不同的数字。