test
公式测试
\(\begin{array}{l}
考虑问题\sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1} [gcd(i,j)=p]\ \ \ ( n,m\leqslant 1e7)\\
\\
\Leftrightarrow \sum\limits _{p}\sum\nolimits ^{\lfloor \frac{min( m,n)}{p} \rfloor }_{d=1} \mu ( g) \lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor \\
\\
\\
\Leftrightarrow \sum ^{min( n,m)}_{i=1} \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{i} \rfloor \sum\limits _{p|i} \mu \left(\frac{i}{p}\right)\\
\\
\\
以上是推到的关键步骤,\\
\\
以下是细节推导。\\
\\
\\
( 1)\rightarrow ( 2) :firstly\ 对每个p分别计算其对答案贡献:\\
\\
( 1) \Leftrightarrow \sum\limits _{p}\sum\limits ^{\lfloor \frac{n}{p} \rfloor }_{i=1}\sum\limits ^{\lfloor \frac{m}{p} \rfloor }_{j=1} [gcd(i,j)=1]\ \ \\
\\
\\
secondly\ 为了得到( 2) ,较简单的方法是使用mobius\ inv的引理\\
\\
\mu *I=e\ \\
\\
( \ *是迪利克雷卷积\ I( n) =n\ ,\ e( n) =[ n=1] \ )\\
\\
即\sum _{d|n} \mu ( d) =[ n=1]\\
\\
\\
(\ \ \ \ ( 6) 的证明:将n分解,n=p_{1}^{a_{1}} p_{2}^{a_{2}} ...p_{k}^{a_{k}} ,\\
所有\mu 不为0,且有i个质因子的数的贡献可以表示为C( k,i) \times ( -1)^{i} ,\\
而\forall n >1:\sum ^{k}_{i=1} C( k,i) \times ( -1)^{i} =0\ \ \ \ )\\
\\
\therefore \sum _{d|gcd( i,j)} \mu ( d) =[ gcd( i,j) =1]\\
\\
\therefore ( 4) \Leftrightarrow \sum\limits _{p}\sum\limits ^{\lfloor \frac{n}{p} \rfloor }_{i=1}\sum\limits ^{\lfloor \frac{m}{p} \rfloor }_{j=1}\sum _{d|gcd( i,j)} \mu ( d)\\
\\
Thirdly\ 我们比较( 2) 和( 7) 发现\sum\limits ^{\lfloor \frac{n}{p} \rfloor }_{i=1}\sum\limits ^{\lfloor \frac{m}{p} \rfloor }_{j=1}\sum _{d|gcd( i,j)} 变成了\sum\nolimits ^{\lfloor \frac{min( m,n)}{p} \rfloor }_{d=1} \lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor \\
\\
可以这么理解,我们枚举d,计算\mu ( d) 的个数,\\
\\
\left( \ d的取值范围是1\sim \lfloor \frac{min( m,n)}{p} \rfloor \ \right)\\
\\
\because d|gcd( i,j) \ \therefore i,j是d的倍数时才对结果有贡献,\\
\\
\therefore \mu ( d) 有\lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor 个。\\
\\
\\
\\
\therefore \sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1} [gcd(i,j)=p]\Leftrightarrow \sum\limits _{p}\sum\limits ^{\lfloor \frac{n}{p} \rfloor }_{i=1}\sum\limits ^{\lfloor \frac{m}{p} \rfloor }_{j=1}\sum _{d|gcd( i,j)} \mu ( d) \Leftrightarrow \sum\limits _{p}\sum\nolimits ^{\lfloor \frac{min( m,n)}{p} \rfloor }_{d=1} \mu ( g) \lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor \\
\\
\\
\\
\\
\\
\\
\end{array}\)
ideone 测试:
公式测试:
代码段测试
#include <bits/stdc++.h>
using namespace std;
bool isPalindrome(const string& s) {
for(int i = 0; i < s.length(); ++i) {
if (s[i] != s[s.length() - i - 1])
return false;
}
return true;
}
bool solve1(string s) {
string t = s;
for(int i = 0; i < s.length(); ++i) {
t = t.back() + t;
t.pop_back();
if (s != t && isPalindrome(t)) {
return true;
}
}
return false;
}
bool anyAnswer(const string& s) {
int nt = 0;
for(int i = 0; i < s.length(); ++i) {
nt += s[i] != s[0];
}
return nt > 1;
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
string s;
cin >> s;
if (anyAnswer(s)) {
cout << (solve1(s) ? 1 : 2) << endl;
} else {
cout << "Impossible" << endl;
}
return 0;
}