Мой код занимает слишком много времени для запуска. То, что я пытался сделать, - это цикл до большого числа, а затем цикл ip для него, чтобы найти его сумму, а затем цикл для проверки делителей. Как мне его оптимизировать?Как уменьшить время выполнения Q12 Project Euler
public class Q12
{
public static void main(String[] args)
{
int answer=5;
Boolean check=false;
int sum=0;
int counter=0;
int kk=0;
while(check==false)
{
loop:
for(int i=1;i<50000000;i++)
{
sum=0;
counter=0;
for(int j=0;j<i;j++)
{
sum=j+sum;
}
for(int k=1;k<sum;k++)
{
if(sum%k==0)
{
counter=counter+1;
}
}
if(counter>=501)
{
check=true;
break loop;
}
}
}
}
}
Благодаря
Использовать математику для оптимизации, например. сумма всех целых значений между a и b должна легко вычисляться без циклирования. – Thomas
Вы пересчитываете сумму из '0' каждый раз, когда вы зацикливаете через' i', просто храните ее вне цикла и добавляете 'i' на каждой итерации цикла. Кроме того, вам не нужно запускать 'i' на' 1'. Есть более эффективные способы получить факторы числа, а не проходить и тестировать их один за другим. Например, если вы знаете, что '2' является фактором, то вы также знаете, что' n/2' является фактором. Кроме того, вы можете остановить 'k' в' sum/2', так как это самый большой возможный фактор (исключая сам номер). – mikeyq6