Matlab 使用指数/幂为使用素数幂的数字创建向量
我试图通过使用质数的指数,为n以下的每个数字创建向量,使用质数向量PV=[2 3 5 7 11 13 17 19 23 29]来识别每个数字,并存储这些向量以供以后的计算。我的PVE=[kx],其中k是与PV相对应的指数,x是PV不除的任何素数的指数,因此x总是0或1,因为我的n是960=(31^2)-1。因此,如果这个集合中的任何数字除以某个数字9,例如,9的向量指数将是[02000],因为3^2是9。22的向量是[1,0,1,0,0,0],这是2*11=22。所以在我的程序中,从2到n的每一个“numba”都有一个素向量指数(PVE)。这源于算术的基本定理,即每个数都可以表示为素数的乘积,并且是唯一的 你能看一下我的程序,看看我做了什么错事来获得指数吗。 节目:Matlab 使用指数/幂为使用素数幂的数字创建向量,matlab,Matlab,我试图通过使用质数的指数,为n以下的每个数字创建向量,使用质数向量PV=[2 3 5 7 11 13 17 19 23 29]来识别每个数字,并存储这些向量以供以后的计算。我的PVE=[kx],其中k是与PV相对应的指数,x是PV不除的任何素数的指数,因此x总是0或1,因为我的n是960=(31^2)-1。因此,如果这个集合中的任何数字除以某个数字9,例如,9的向量指数将是[02000],因为3^2是9。22的向量是[1,0,1,0,0,0],这是2*11=22。所以在我的程序中,从2到n的每一
我不太明白您在第一个循环中要做什么,但如果我是您,我会使用递归来获得指数。像这样的
function [ expo ] = get_exponent( p, num, depth )
% return the exponent
% p: prime number
% num: number to be analyzed
% depth: depth of the recursion
if p==1,
error ('Do not use 1 for p!!')
end
if mod(num,p) == 0,
depth = depth+1;
expo = get_exponent(p, num/p, depth);
else
expo = depth;
end
end
此get_index
函数返回某素数p
的某个数num
的指数。比如说,
>> get_exponent(5,325,0)
ans =
2
>> get_exponent(13,325,0)
ans =
1
在第二个循环中使用此函数可获得每个素数的指数。您可以在一行中为每个
numba
计算PVE
,使用和:
例如:
>> PV = [2 3 5 7 11 13 17 19 23 29];
>> numba = 22;
>> PVE = histc(factor(numba),[PV inf])
PVE =
1 0 0 0 1 0 0 0 0 0 0
>> numba = 9;
>> PVE = histc(factor(numba),[PV inf])
PVE =
0 2 0 0 0 0 0 0 0 0 0
哦,代码的第一部分只是试图定义质数是什么,我甚至可能不使用它。我会试试你说的。谢谢路易斯!!我相信你已经回答了我之前的一个问题,我希望我能像你一样有matlab的背景,我只是个新手。有一个问题,程序中的inf是什么?这是把我的向量扩展10吗?@Crisp
inf
是(正)无穷大。我加入它是为了让PVE
中的最后一个条目捕获29以上的素数,它们的多重性(指数)Hi Luis,我意识到的inf只是将大于29的素数赋给29列,所以inf只是在技术上增加了一列额外的零,同时使用29来表示大于29的素数。这怎么能解决呢。我已经使用了一种类似的技术,你已经向我展示了集合差异素数,以获得最后一列来表示是否有任何素数高于29,但没有用,但感谢你的所有帮助!!!我将继续处理它。@cripinf
在29列之后添加一列
PVE = histc(factor(numba),[PV inf])
>> PV = [2 3 5 7 11 13 17 19 23 29];
>> numba = 22;
>> PVE = histc(factor(numba),[PV inf])
PVE =
1 0 0 0 1 0 0 0 0 0 0
>> numba = 9;
>> PVE = histc(factor(numba),[PV inf])
PVE =
0 2 0 0 0 0 0 0 0 0 0