这题看着是非常吓人的,但是通过对变量范围的运算,发现,n*a的范围是小于1e6的,而题目说的是有解,所以每次删除后面b位字符之后还剩下i位字符,这些字符和答案比较,上面推出来答案的范围,如果2着要相等,所以i的范围也就确定了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, ll> PII;
#define pb emplace_back
//#define int ll
#define all(a) a.begin(),a.end()
#define x first
#define y second
#define ps push_back
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
void solve();
const int N = 1e6 + 10;
signed main() {
IOS;
ll t;
cin >> t;
while(t --)
solve();
return 0;
}
void solve() {
ll n;
cin >> n;
string sn = to_string(n);
ll lsn = sn.size();
while(sn.size() < 6) sn += sn;
vector<pii> v_ans;
for(int a = 1; a <= 10000; ++ a)
{
for(int i = 1; i <= 6; ++ i)
{
ll nowsl = lsn * a;
string anss1 = sn.substr(0,i);
ll b = nowsl - i;
string anss2 = to_string(n*a-b);
if(anss1 == anss2)
{
if(b != 0)
v_ans.push_back({a,b});
}
}
}
cout << v_ans.size() << endl;
for(auto it : v_ans)
cout << it.x << ' ' << it.y << endl;
}