Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Const
- X = 100000;
- Var
- NotZero, Ans : Array[0 .. X - 1] Of LongInt;
- DigitSum, DigitProd : Array[0 .. X - 1] Of LongInt;
- J, Cnt, I, S, R, P, K, Z, U, XX: LongInt;
- Function Prod(X, Cnt : LongInt) : LongInt;
- Var
- Res : LongInt;
- Begin
- Res := 1;
- For Cnt := 1 To Cnt Do
- Begin
- Res := Res * (X Mod 10);
- X := X Div 10;
- End;
- Prod := Res;
- End;
- Function Sum(X : LongInt) : LongInt;
- Var
- Res : LongInt;
- Begin
- Res := 0;
- While X > 0 Do
- Begin
- Inc(Res, X Mod 10);
- X := X Div 10;
- End;
- Sum := Res;
- End;
- Procedure SolveStupid;
- Var
- SS, PP, X : LongInt;
- Begin
- I := 1;
- For SS := 1 To K - 1 Do I := I * 10;
- For I := I To I * 10 - 1 Do
- Begin
- SS := 0; PP := 1; X := I;
- While X > 0 Do
- Begin
- Inc(SS, X Mod 10); PP := PP * (X Mod 10);
- X := X Div 10;
- End;
- If (SS <> S) Or (PP <> P)
- Then Continue;
- Inc(R); Ans[R] := I;
- End;
- WriteLn(R);
- For I := 1 To R Do WriteLn(Ans[I]);
- End;
- Begin
- Read(S, P, K);
- If K < 7 Then
- Begin
- SolveStupid;
- Halt(0);
- End;
- For I := X Div 10 To X - 1 Do
- Begin
- Z := Prod(I, 5);
- If (Z = 0) Or (Z > P) Or (Z * 9 * 9 * 9 < P) Then Continue;
- U := Sum(I);
- If (U + 3 > S) Or (U + 27 < S) Then Continue;
- Inc(Cnt);
- NotZero[Cnt] := I;
- DigitSum[Cnt] := U;
- DigitProd[Cnt] := Z;
- End;
- U := 1; XX := 0;
- For I := 1 To K - 1 - 5 Do
- Begin
- Inc(XX, U);
- U := U * 10;
- End;
- Z := 0;
- For I := U + XX To U * 10 Do
- Begin
- Z := Prod(I, 3);
- If Z = 0 Then Continue;
- U := Sum(I);
- For J := 1 To Cnt Do
- Begin
- If (DigitSum[J] + U = S) And (DigitProd[J] * Z = P) Then
- Begin
- Inc(R);
- Ans[R] := I * X + NotZero[J];
- End;
- End;
- End;
- WriteLn(R);
- For I := 1 To R Do WriteLn(Ans[I]);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement