题意:
给定一个数k(3<=k<=10^2000),找一个最大的数b使得gcd(k,b)=1。分析:
当k为奇数,答案就是(n-1)/2;
当k为偶数,如果k/2为奇数,答案是k/2-2;否则为k/2-1。
#include <cstdio>
using namespace std;
const int MAXL = 2009;
struct bi
{
short num[MAXL];
int l;
void read()
{
char c = getchar();
if(c >= '0' && c <= '9') read();
else return ;
num[++l] = c-'0';
}
void binary()
{
if(num[1]&1) num[1]--;
for(int i = l; i >= 1; --i)
{
if(num[i]&1) num[i-1] += 10;
num[i] >>= 1;
}
for(int i = l; i >= 1; --i)
if(num[i] > 0) {l = i;break;}
}
void print()
{
for(int i = l; i >= 1; --i)
putchar('0'+num[i]);
}
void minus(short k)
{
if(num[1] >= k) num[1] -= k;
else
{
num[1] += 10-k;
num[2]--;
int i = 2;
while(num[i] < 0)
{
num[i] += 10;
num[++i]--;
}
}
for(int i = l; i >= 1; --i)
if(num[i] > 0) {l = i;break;}
}
}src;
int main()
{
src.read();
if(src.num[1]&1)
src.binary();
else
{
src.binary();
if(src.num[1]&1) src.minus(2);
else src.minus(1);
}
src.print();
return 0;
}