using
System;
using
System.Collections.Generic;
class
GFG{
static
int
gcd(
int
a,
int
b)
{
if
(b == 0)
return
a;
return
gcd(b, a % b);
}
static
long
recursive(
long
idx,
long
sum,
long
tight,
string
st,
long
[,,] dp,
long
num)
{
if
(idx == num)
{
return
sum == 0 ? 1 : 0;
}
if
(dp[(
int
)idx, (
int
)tight, (
int
)sum] != -1)
return
dp[(
int
)idx, (
int
)tight, (
int
)sum];
long
newTight;
long
ans = 0;
long
d;
for
(d = 0; d < 10; ++d)
{
newTight = 0;
if
(tight == 1 && st[((
int
)idx)] -
'0'
< d)
continue
;
if
(tight == 1 && st[((
int
)idx)] -
'0'
== d)
newTight = 1;
if
(sum >= d)
ans += recursive(idx + 1, sum - d,
(
int
)newTight, st, dp, num);
}
return
dp[(
int
)idx, (
int
)tight, (
int
)sum] = ans;
}
static
List<
long
> formArray(
long
N)
{
long
[,,] dp =
new
long
[20, 2, 166];
for
(
int
i = 0; i < 20; i++)
{
for
(
int
j = 0; j < 2; j++)
{
for
(
int
k = 0; k < 166; k++)
{
dp[i, j, k] = -1;
}
}
}
string
st = N.ToString();
long
num = st.Length;
List<
long
> arr =
new
List<
long
>();
for
(
int
i = 1; i <= 162; ++i)
{
arr.Add(recursive(0, i, 1, st, dp, num));
}
return
arr;
}
static
long
findPair(
long
a,
long
b)
{
List<
long
> arr_smaller = formArray(a - 1);
List<
long
> arr_greater = formArray(b);
for
(
int
i = 0; i < arr_greater.Count; ++i)
{
arr_greater[i] = arr_greater[i] -
arr_smaller[i];
}
long
ans = 0;
for
(
int
i = 1; i <= 162; ++i)
{
for
(
int
j = i + 1; j <= 162; ++j)
{
if
(gcd(i, j) == 1)
{
ans = (ans + arr_greater[i - 1] *
arr_greater[j - 1]);
}
}
}
return
ans;
}
static
public
void
Main()
{
long
a = 12, b = 15;
Console.WriteLine(findPair(a, b));
}
}