struct node
{
int a[25];
node(){memset(a, 0, sizeof a); a[0] = 1;}
node(int x)
{
a[0] = 0;
if(!x) a[++a[0]] = 0;
else while(x) a[++a[0]] = (x % 10), x /= 10;
}
inline void operator = (node A)
{
memset(a, 0, sizeof a);
for(int i = A.a[0]; i >= 0; --i)
a[i] = A.a[i];
}
inline node operator + (node A)
{
node B;
B.a[0] = max(a[0], A.a[0]);
for(int i = 1; i <= B.a[0]; ++i)
{
B.a[i] += a[i] + A.a[i];
if(B.a[i] > 9)
{
B.a[i] -= 10;
++B.a[i + 1];
if(i == B.a[0]) ++B.a[0];
}
}
return B;
}
inline node operator - (node A)
{
node B;
B.a[0] = a[0];
for(int i = 1; i <= B.a[0]; ++i)
{
B.a[i] += a[i] - A.a[i];
if(B.a[i] > 9)
{
B.a[i] -= 10;
++B.a[i + 1];
if(i == B.a[0]) ++B.a[0];
}
else if(B.a[i] < 0)
{
B.a[i] += 10;
--B.a[i + 1];
}
else if(B.a[i] == 0 && i == B.a[0])
--B.a[0];
}
if(B.a[0] == 0 && B.a[1] == 0) B.a[0] = 1;
return B;
}
inline void Outgjd(node A)
{
for(int i = A.a[0]; i; --i) cout << A.a[i];
}
inline node Mul(node A, int x)
{
node B;
B.a[0] = A.a[0];
for(int i = 1; i <= B.a[0]; ++i)
{
B.a[i] += A.a[i] * x;
if(B.a[i] > 9)
{
B.a[i + 1] += (B.a[i] / 10);
B.a[i] %= 10;
if(i == B.a[0]) ++B.a[0];
}
}
return B;
}
inline node operator * (node A)
{
node B;
for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
node D, C;
for(int i = 1; i <= A.a[0]; ++i)
{
C = Mul(B, A.a[i]);
if(i ^ 1)
for(int j = C.a[0]; j; --j)
C.a[j + i - 1] = C.a[j];
for(int j = 1; j < i; ++j) C.a[j] = 0;
C.a[0] += i - 1;
D = D + C;
}
return D;
}
inline bool operator <= (node A)
{
if(a[0] < A.a[0]) return true;
if(a[0] > A.a[0]) return false;
for(int i = a[0]; i; --i)
if(a[i] < A.a[i])
return true;
else if(a[i] > A.a[i]) return false;
return true;
}
inline node operator / (node A)
{
node B;
for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
node C = node(10), D;
node AA[25];
AA[A.a[0]] = A;
for(int i = A.a[0] + 1; i <= a[0]; ++i) AA[i] = AA[i - 1] * C;
D.a[0] = 0;
for(int i = a[0]; i >= A.a[0]; --i)
{
while(AA[i] <= B)
{
B = B - AA[i];
++D.a[i - A.a[0] + 1];
if(!D.a[0]) D.a[0] = i - A.a[0] + 1;
}
}
return D;
}
inline node operator % (node A)
{
node B;
for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
node C = node(10);
node AA[25];
AA[A.a[0]] = A;
for(int i = A.a[0] + 1; i <= a[0]; ++i) AA[i] = AA[i - 1] * C;
for(int i = a[0]; i >= A.a[0]; --i)
while(AA[i] <= B)
B = B - AA[i];
return B;
}
};
inline node gcd(node a, node b)
{
return (b.a[0] == 1 && b.a[1] == 0) ? a :gcd(b, a % b);
}
inline void Outgjd(node A)
{
for(int i = A.a[0]; i; --i) cout << A.a[i];
}
struct FS{
node fz, fm;
FS(){fz = 0, fm = 1;}
FS(node a, node b) : fz(a), fm(b){}
inline void operator = (FS A)
{
fz = A.fz, fm = A.fm;
}
inline FS operator + (FS A)
{
node a = fm, b = fz, c = A.fm, d = A.fz;
node x = b * c + a * d, y = a * c;
node g = gcd(x, y);
return FS(x / g, y / g);
}
inline FS operator / (int c)
{
node a = fm, b = fz;
node x = b, y = a * c;
node g = gcd(x, y);
return FS(x / g, y / g);
}
}val[N];
inline void Outfs(FS A)
{
Outgjd(A.fz); cout << ' ';
Outgjd(A.fm); cout << ' ';
cout << '\n';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具