Cerința
Dorind să inventeze ceva nou Mate a inventat numerele “ecou”. Un număr natural A se numește număr-ecou dacă există un număr natural B cu proprietatea că numărul A se poate obține prin concatenarea de un număr de ori (cel puțin de două ori) a numărului B. De exemplu numărul 313313 este număr-ecou, iar 31313 nu este număr-ecou.
Mate și-a propus să afle câte numere-ecou sunt printre numerele naturale care au exact N cifre. Deoarece acest număr poate fi foarte mare, se va afișa doar restul împărțirii rezultatului la 10^9+17.
Date de intrare
Fișierul de intrare nrecou.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.
Date de ieșire
În fișierul de ieșire nrecou.out se va afișa, pe primul rând, valoarea cerută.
Restricții și precizări
- pentru 20% din teste
1 ≤ N ≤ 6 - pentru alte 20% din teste
N ≤ 12 - pentru alte 30% din teste
N ≤ 10.000 - pentru alte 30% din teste
N ≤ 1.000.000
Exemplu
nrecou.in
3
nrecou.out
9
Explicație
Numerele ecou cu trei cifre sunt 111, 222, 333, 444, 555, 666, 777, 888, 999.
#include <bits/stdc++.h>
using namespace std;
ifstream cin("nrecou.in");
ofstream cout("nrecou.out");
int n , D[10000000] ;
long long nr , rez;
int main()
{
cin >> n;
for(int d = 2 ; d <= n && n / d >= 2 ; d++)
if(n % d == 0)
{
nr = 9;
int x = d;
for(int j = 1 ; j < x ; j++)
nr = (nr * 10) % 1000000017;
for(int p = 2 ; p <= x / 2 ; p++)
{
if(x % p == 0) nr -= D[p];
if(nr < 0) nr += 1000000017;
}
nr -= 9;
if(nr < 0) nr += 1000000017;
D[d] = nr % 1000000017;
rez = (nr + rez) % 1000000017;
}
cout<<(rez+9)%1000000017;
return 0;
}