Advertisement
mrlolthe1st

Untitled

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