using
System;
class
GFG{
static
int
[,,,] dp =
new
int
[100, 2, 10, 2];
static
int
__gcd(
int
a,
int
b)
{
return
b == 0 ? a : __gcd(b, a % b);
}
static
int
noncoprimeCount(
int
i,
int
N,
char
[] S,
int
bound,
int
prev,
int
allZeros)
{
if
(i == N)
return
1;
int
val = dp[i, bound, prev, allZeros];
if
(val != -1)
return
val;
int
cnt = 0;
for
(
int
j = 0;
j <= (bound != 0 ? (S[i] -
'0'
) : 9); ++j)
{
if
((__gcd(j, prev) != 1)
|| (i == 0)
|| allZeros == 1)
{
cnt += noncoprimeCount(i + 1, N, S, bound != 0 &
(j == (S[i] -
'0'
)) ? 1 : 0, j,
(allZeros != 0 & (j == 0)) ? 1 : 0);
}
}
return
val = cnt;
}
static
void
noncoprimeCountUtil(
int
R)
{
String S = String.Join(
""
, R);
int
N = S.Length;
for
(
int
i = 0; i < 100; i++)
for
(
int
j = 0; j < 2; j++)
for
(
int
k = 0; k < 10; k++)
for
(
int
l = 0; l < 2; l++)
dp[i, j, k, l] = -1;
int
ans = noncoprimeCount(0, N, S.ToCharArray(), 1, 0, 1);
Console.Write(ans - 1 +
"\n"
);
}
public
static
void
Main(String[] args)
{
int
N = 10000;
noncoprimeCountUtil(N);
}
}