Последовательность чисел треугольника генерируется путем сложения натуральных чисел. Таким образом, 7ое число треугольника будет 1+2+3+4+5+6+7 = 28
. Первые десять условий будут: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55
. Факторы, содержащиеся в первых четырех числах треугольника:
1: 1
3: 1, 3
6: 1, 2, 3, 6
10: 1, 2, 5, 10
Мы видим, что 6
— первое треугольное число, имеющее более четырех делителей.
Чтобы найти первое треугольное число с более чем 500 делителями, я написал следующий код:
s1=0;
s2=0;
A=zeros(1,2);
for i=1:4000
s1=i+s1;
s2=0;
for n=1:s1
if rem(s1,n)==0
s2=s2+1;
end
end
if s2>=500
A=[s1 s2];
disp(A)
end
end
Я хотел бы ускорить этот код, используя parfor
вместо for
во внешнем цикле. Однако я получаю сообщение об ошибке:
Ошибка: переменная s1, возможно, задумана как редукционная переменная, но на самом деле является неинициализированной временной.
См. Parallel for Loops в MATLAB, Временные переменные, предназначенные как переменные сокращения.
Как я могу распараллелить этот код?