import math
def 					_snake_case	(  __snake_case = 100						):
					_UpperCamelCase			     =     sum(i * i for i in range(1  ,     n + 1						)						)
					_UpperCamelCase			     =     int(math.pow(sum(range(1  ,     n + 1						)						)  ,     2						)						)
					return square_of_sum - sum_of_squares


if __name__ == "__main__":
					print(f'{solution() = }')




'''simple docstring'''
# We ignore warnings about stepping the scheduler since we step it ourselves during gradient accumulation

import warnings

from .state import AcceleratorState, GradientState


warnings.filterwarnings('ignore', category=UserWarning, module='torch.optim.lr_scheduler')

class     _lowerCamelCase       :




 '''simple docstring'''


 def __init__(   self   ,   __lowercase   ,   __lowercase   ,   __lowercase = True   ,   __lowercase = False    ):

  """simple docstring"""







  __A	:		List[str]	  =      scheduler
  __A	:		Dict	  =      optimizers if isinstance(__lowercase   ,   (list, tuple)    ) else [optimizers]
  __A	:		List[Any]	  =      split_batches
  __A	:		Any	  =      step_with_optimizer
  __A	:		List[Any]	  =      GradientState()


 def 			snake_case__ (   self   ,   *__lowercase   ,   **__lowercase    ):

  """simple docstring"""







  if not self.step_with_optimizer:
   # No link between scheduler and optimizer -> just step
   self.scheduler.step(*__lowercase   ,   **__lowercase    )
   return

  # Otherwise, first make sure the optimizer was stepped.
  if not self.gradient_state.sync_gradients:
   if self.gradient_state.adjust_scheduler:
    self.scheduler._step_count += 1
   return

  for opt in self.optimizers:
   if opt.step_was_skipped:
    return
  if self.split_batches:
   # Split batches -> the training dataloader batch size is not changed so one step per training step
   self.scheduler.step(*__lowercase   ,   **__lowercase    )
  else:
   # Otherwise the training dataloader batch size was multiplied by `num_processes`, so we need to do
   # num_processes steps per training step
   __A	:		Tuple	  =      AcceleratorState().num_processes
   for _ in range(__lowercase    ):
    # Special case when using OneCycle and `drop_last` was not used
    if hasattr(self.scheduler   ,   'total_steps'    ):
     if self.scheduler._step_count <= self.scheduler.total_steps:
      self.scheduler.step(*__lowercase   ,   **__lowercase    )
    else:
     self.scheduler.step(*__lowercase   ,   **__lowercase    )


 def 			snake_case__ (   self    ):

  """simple docstring"""







  return self.scheduler.get_last_lr()


 def 			snake_case__ (   self    ):

  """simple docstring"""







  return self.scheduler.state_dict()


 def 			snake_case__ (   self   ,   __lowercase    ):

  """simple docstring"""







  self.scheduler.load_state_dict(__lowercase    )


 def 			snake_case__ (   self    ):

  """simple docstring"""







  return self.scheduler.get_lr()







 def 			snake_case__ (   self   ,   *__lowercase   ,   **__lowercase    ):

  """simple docstring"""







  return self.scheduler.print_lr(*__lowercase   ,   **__lowercase    )






