Matlab 使用指数/幂为使用素数幂的数字创建向量

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的每一

我试图通过使用质数的指数,为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)。这源于算术的基本定理,即每个数都可以表示为素数的乘积,并且是唯一的

你能看一下我的程序,看看我做了什么错事来获得指数吗。 节目:


我不太明白您在第一个循环中要做什么,但如果我是您,我会使用递归来获得指数。像这样的

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,但没有用,但感谢你的所有帮助!!!我将继续处理它。@crip
inf
在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