题目
题解思路
下面的文章讲的很清楚。
关键是对互质条件推出的公式转移 。
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
const int INF = 0x3f3f3f3f ;
long long gehi(long long c )
{
long long re = c ;
for (int i = 2 ; i <= c/i ; i++ )
{
if ( c % i == 0 )
{
while ( c % i == 0 )
c /= i ;
re = re / i *( i - 1 ) ;
}
}
if ( c > 1 )
re = re / c * ( c - 1 );
return re ;
}
long long gsc (long long a , long long b , long long mo )
{
long long re = 0 ;
while( b )
{
if ( b & 1 ) re =( re + a )% mo ;
a = (a + a ) % mo ;
b >>= 1 ;
}
return re ;
}
long long qmi ( long long di , long long mi , long long mo )
{
long long re = 1 ;
while( mi )
{
if ( mi & 1 ) re = gsc( re , di , mo ) ;
di = gsc( di , di , mo );
mi >>= 1 ;
}
return re ;
}
int main ()
{
ios::sync_with_stdio(false);
long long l;
int tt = 1 ;
while( cin >> l && l )
{
int d = __gcd( (long long )8 ,l );
long long c = 9*l /d ;
long long phi = gehi(c) ;
long long ans = 1e18 ;
// cout << phi << " " << c <<"\n";
if ( c % 2 == 0 || c % 5 == 0 )
ans = 0 ;
else
{
for ( long long i = 1 ; i * i <= phi ; i++ )
{
if ( phi % i == 0 )
{
if ( qmi( 10 , i , c ) == 1 )
ans = min ( ans , i ) ;
if ( qmi( 10 , phi / i , c ) == 1 )
ans = min ( ans , phi / i ) ;
}
}
}
cout << "Case " << tt << ": " << ans << "\n";
tt++;
}
return 0 ;
}