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

时间:2014-02-28 00:52:11

标签: matlab

我试图通过使用素数的指数为每个数字创建向量,使用素数向量PV = [2 3 5 7 11 13 17 19 23 29]来识别每个数字并存储这些向量供以后计算。我的PVE = [kkkkkkkkkk],其中k是与PV相对应的指数,x是PV不分割的任何素数的指数,因此x总是0或1,因为我的n是960 =(31 ^ 2) - 1。因此,如果此集合中的任何数字除以某个数字9,例如,向量指数9将为[0 2 0 0 0 0 0 0 0 0 0],因为3 ^ 2为9.而22的向量将为[1 0 0 0 1 0 0 0 0 0 0]这是2 * 11 = 22。所以我的程序中从2到n的每个“numba”都会有一个素数向量指数(PVE)。这来自于算术的基本定理,每个数都可以表示为素数的乘积,并且它是唯一的。

请你看一下我的程序,看看我做错了什么来获得指数。 程序:

n=960

for numba=2:n
    for c=2:numba-1


    if numba==2
        c=2


    if mod(numba,c)~=0
        numba=p

    end
    end
end

end

for k=1:9




PVEC=[2^k 3^k 5^k 7^k 11^k 13^k 17^k 19^k 23^k 29^k]

if p>29


if mod(numba,PVEC)==0
 max(PVEC,k) &  PVE==[k k k k k k k k k k 0]


    if mod(numba,PVE)~=0

    PVE=[0 0 0 0 0 0 0 0 0 0 1]

    end
end



end

end

2 个答案:

答案 0 :(得分:0)

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

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_exponent函数返回某些素数num的某个数字p的指数。例如,

>> get_exponent(5,325,0)
ans =
     2
>> get_exponent(13,325,0)
ans =
     1

在第二个循环中使用此函数来获得每个素数的指数。

答案 1 :(得分:0)

您可以使用factorshistc在一行中为每个PVE计算numba

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