Треугольное число или треугольное число подсчитывают объекты, расположенные в виде равностороннего треугольника. Их формула n(n+1)/2.
Я хочу написать число как сумму двух треугольных чисел. ( 24=21+3 ; 48=45+3 )
Я написал некоторый код на C++, который делает это очень хорошо для меньших чисел. Но по мере того, как N становится больше, оно становится все медленнее и медленнее, что заставляет меня думать, что мой код неэффективен или совершенно неверен. Поэтому прошу предложений.
Я открыт и буду признателен за любую критику или идеи, которые у вас могут быть. Вот что я придумал.
Он генерирует число «i» и дает «j» значение x-i. Он проверяет, являются ли оба числа треугольными (iok, jok), и если да, то распечатывает их и завершает. Если он не находит таких чисел, он печатает «НЕТ».
#include <iostream>
using namespace std;
int main(){
long long x;
cin>>x;
long long j,i;
int iok,jok;
long sum;
long long n;
for(i=1;i<=x;i++){
iok=0;
sum=0;
for (n=1; sum<=i; n++)
{
sum = sum + n;
if (sum==i)
iok=1;
}
j=x-i;
jok=0;
sum=0;
for (n=1; sum<=j; n++)
{
sum = sum + n;
if (sum==j)
jok=1;
}
if(jok && iok){
cout<<i<<" "<<j;
return 0;
}
}
cout<<"NO";
return 0;
}
i
, а затем проверять, является лиi
треугольным. Вы можете перебратьn
и установитьi = n*(n+1)/2
, чтобы для начала вы смотрели только на треугольные числа. Они очень разрежены, поэтому у вас будет намного меньше итераций внешнего цикла. Кроме того, вы можете остановиться, как толькоi > x/2
- person Igor Tandetnik   schedule 04.01.2020j
треугольным циклом, продолжается доsum<=i
? Разве это не должно бытьsum<=j
? - person Igor Tandetnik   schedule 04.01.2020n
, создайтеn
-е треугольное число, вычтите его из ввода и проверьте, является ли результат треугольным числом. - person Thomas Sablik   schedule 04.01.2020sum<=j
, вы правы, спасибо! - person T9 Ethereal   schedule 04.01.2020