View Code
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #include <bitset> 7 #include <map> 8 #include <vector> 9 10 using namespace std; 11 typedef long long llint; 12 13 #define print(x) cout<<x<<endl 14 #define input(x) cin>>x 15 #define SIZE 45000 16 17 inline int mul(int x) 18 { 19 return x*x; 20 } 21 22 int prime[SIZE],hash[SIZE]; 23 int ind,sz; 24 int prime_factor[SIZE]; 25 vector<llint> factor; 26 27 void init() 28 { 29 ind=0; 30 bitset<SIZE> p; 31 for(int i=2;i<SIZE/2;i++) 32 { 33 if(p[i]) continue; 34 else 35 { 36 for(int j=2;i*j<SIZE;j++) p[i*j]=1; 37 } 38 } 39 40 for(int i=2;i<SIZE;i++) 41 { 42 if(!p[i]) prime[ind++]=i; 43 } 44 } 45 llint gcd(llint a,llint b) 46 { 47 if(a<b) return gcd(b,a); 48 else if(a%b==0) return b; 49 else return gcd(b,a%b); 50 } 51 52 llint eular(llint y) 53 { 54 llint ans=1; 55 for(int i=0;i<ind && mul(prime[i])<=y;i++) 56 { 57 if(y%prime[i]==0) 58 { 59 ans*=(prime[i]-1); 60 y/=prime[i]; 61 } 62 while(y%prime[i]==0) 63 { 64 y/=prime[i]; 65 ans*=prime[i]; 66 } 67 } 68 if(y!=1) ans*=(y-1); 69 return ans; 70 } 71 72 void dfs(llint iter,llint val=1) 73 { 74 if(iter==sz) factor.push_back(val); 75 else 76 { 77 llint num=hash[iter]; 78 llint t=prime_factor[iter]; 79 llint t_val=val; 80 for(int i=0;i<t;i++) 81 { 82 dfs(iter+1,t_val*num); 83 t_val*=num; 84 } 85 dfs(iter+1,val); 86 } 87 } 88 89 llint safemul(llint a,llint b,llint c) 90 { 91 llint ans=0; 92 while(b) 93 { 94 if(b&1) ans+=a; 95 if(b>=2) a=(a+a)%c; 96 ans%=c; 97 b>>=1; 98 } 99 return ans; 100 } 101 102 llint fastmod(llint a,llint b,llint c) 103 { 104 if(b==0) return 1; 105 else if(b==1) return a%c; 106 else 107 { 108 llint tmp=fastmod(a,b>>1,c)%c; 109 tmp=safemul(tmp,tmp,c); 110 if(b&1) return (tmp*a%c)%c; 111 else return tmp%c; 112 } 113 } 114 115 int slove(int x) 116 { 117 factor.clear(); 118 memset(hash,0,sizeof(hash)); 119 sz=0; 120 memset(prime_factor,0,sizeof(prime_factor)); 121 llint y=9LL*x/gcd(8,x); 122 if(gcd(10,y)!=1) return 0; 123 llint e=eular(y); 124 //print(e<<' '<<y); 125 for(int i=0;i<ind && prime[i]*prime[i]<=e;i++) 126 { 127 while(e%prime[i]==0) 128 { 129 prime_factor[sz]++; 130 e/=prime[i]; 131 } 132 hash[sz]=prime[i]; 133 sz++; 134 } 135 hash[sz]=e; 136 prime_factor[sz++]++; 137 dfs(0,1); 138 sort(factor.begin(),factor.end()); 139 for(int i=0;i<(int)factor.size();i++) 140 { 141 if(fastmod(10,factor[i],y)==1) return factor[i]; 142 } 143 return 0; 144 } 145 146 147 int main() 148 { 149 int x,cas=1; 150 init(); 151 while(scanf("%d",&x)!=EOF && x) 152 { 153 printf("Case %d: ",cas++); 154 print(slove(x)); 155 } 156 return 0; 157 }