Advertisement
mrlolthe1st

Untitled

Aug 17th, 2021
1,596
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.14 KB | None | 0 0
  1. Const
  2.     X = 100000;
  3. Var
  4.     Ans : Array[0 .. X - 1] Of LongInt;
  5.     DigitProd, NotZero: Array[5 .. 72, 0 .. 50000 - 1] Of LongInt;
  6.     L, RR, M, J, I, S, R, P, K, Z, U, XX: LongInt;
  7.     Cnt : Array [-27 .. 72] Of LongInt;
  8. Function Prod(X, Cnt : LongInt) : LongInt;
  9. Var
  10.     Res : LongInt;
  11. Begin
  12.     Res := 1;
  13.     For Cnt := 1 To Cnt Do
  14.     Begin
  15.         Res := Res * (X Mod 10);
  16.         X := X Div 10;
  17.     End;
  18.     Prod := Res;
  19. End;
  20.  
  21. Function Sum(X : LongInt) : LongInt;
  22. Var
  23.     Res : LongInt;
  24. Begin
  25.     Res := 0;
  26.     While X > 0 Do
  27.     Begin
  28.         Inc(Res, X Mod 10);
  29.         X := X Div 10;
  30.     End;
  31.     Sum := Res;
  32. End;
  33.  
  34. Procedure SolveStupid;
  35. Var
  36.     SS, PP, X : LongInt;
  37. Begin
  38.     I := 1;
  39.     For SS := 1 To K - 1 Do I := I * 10;
  40.     For I := I To I * 10 - 1 Do
  41.     Begin
  42.         SS := 0; PP := 1; X := I;
  43.         While X > 0 Do
  44.         Begin
  45.             Inc(SS, X Mod 10); PP := PP * (X Mod 10);
  46.             X := X Div 10;
  47.         End;
  48.         If (SS <> S) Or (PP <> P)
  49.         Then Continue;
  50.         Inc(R); Ans[R] := I;
  51.     End;
  52.     WriteLn(R);
  53.     For I := 1 To R Do WriteLn(Ans[I]);
  54. End;
  55.  
  56. Begin
  57.     Read(S, P, K);
  58.     If K < 6 Then
  59.     Begin
  60.         SolveStupid;
  61.         Halt(0);
  62.     End;
  63.     FillChar(Cnt, SizeOf(Cnt), 0);
  64.     For I := X Div 10 To X - 1 Do
  65.     Begin
  66.         Z := Prod(I, 5);
  67.         If (Z = 0) Or (Z > P) Or (Z * 9 * 9 * 9 < P) Then Continue;
  68.         U := Sum(I);
  69.         If (U + K - 5 > S) Or (U + 27 < S) Then Continue;
  70.         Inc(Cnt[U]);
  71.         NotZero[U][Cnt[U]] := I;
  72.         DigitProd[U][Cnt[U]] := Z;
  73.     End;
  74.     U := 1; XX := 0;
  75.     For I := 1 To K - 1 - 5 Do
  76.     Begin
  77.         Inc(XX, U);
  78.         U := U * 10;
  79.     End;
  80.     Z := 0;
  81.     For I := U + XX To U * 10 Do
  82.     Begin
  83.         Z := Prod(I, K - 5);
  84.         If Z = 0 Then Continue;
  85.         U := Sum(I);
  86.         For J := 1 To Cnt[S - U] Do
  87.         Begin
  88.             If DigitProd[S - U][J] * Z = P Then
  89.             Begin
  90.                 Inc(R);
  91.                 Ans[R] := I * X + NotZero[S - U][J];
  92.             End;
  93.         End;
  94.     End;
  95.     WriteLn(R);
  96.     For I := 1 To R Do WriteLn(Ans[I]);
  97. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement