我试图通过使用素数的指数为每个数字创建向量,使用素数向量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
答案 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)