Description:

Mathematicians love all sorts of odd properties of numbers. For instance, they consider UVA 294 - Divisors (因子个数)_#include

To help them search for interesting numbers, you are to write a program that scans a range of numbers and determines the number that has the largest number of divisors in the range. Unfortunately, the size of the numbers, and the size of the range is such that a too simple-minded approach may take too much time to run. So make sure that your algorithm is clever enough to cope with the largest possible range in just a few seconds.

Input

The first l

The first line of input specifies the number UVA 294 - Divisors (因子个数)_#define_02 of ranges, and each of the UVA 294 - Divisors (因子个数)_#define_02 following lines contains a range, consisting of a lower bound Land an upper bound UVA 294 - Divisors (因子个数)_#include_04, where UVA 294 - Divisors (因子个数)_#define_05 and UVA 294 - Divisors (因子个数)_#include_04 are included in the range. UVA 294 - Divisors (因子个数)_#define_05 and UVA 294 - Divisors (因子个数)_#include_04 are chosen such that UVA 294 - Divisors (因子个数)_#include_09 and UVA 294 - Divisors (因子个数)_#include_10

Output

For each range, find the number UVA 294 - Divisors (因子个数)_#define_11 which has the largest number of divisors (if several numbers tie for first place, select the lowest), and the number of positive divisors UVA 294 - Divisors (因子个数)_#include_12 of UVA 294 - Divisors (因子个数)_#define_11 (where UVA 294 - Divisors (因子个数)_#define_11 is included as a divisor). Print the text ‘Between UVA 294 - Divisors (因子个数)_#define_05 and UVA 294 - Divisors (因子个数)_#define_16 has a maximum of Ddivisors.’, where UVA 294 - Divisors (因子个数)_#define_05, UVA 294 - Divisors (因子个数)_#define_18, UVA 294 - Divisors (因子个数)_#define_11, and UVA 294 - Divisors (因子个数)_#include_12

Sample Input

3
1 10
1000 1000
999999900 1000000000

Sample Output

Between 1 and 10, 6 has a maximum of 4 divisors.
Between 1000 and 1000, 1000 has a maximum of 16 divisors.
Between 999999900 and 1000000000, 999999924 has a maximum of 192 divisors

题意:

给你 UVA 294 - Divisors (因子个数)_快速幂_21,让你找出 UVA 294 - Divisors (因子个数)_快速幂_21之间因子最多的数是多少 UVA 294 - Divisors (因子个数)_#include_23

AC代码:

#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <stack>
#include <queue>
using namespace std;
#define sd(n) scanf("%d", &n)
#define sdd(n, m) scanf("%d%d", &n, &m)
#define sddd(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define pd(n) printf("%d\n", n)
#define pc(n) printf("%c", n)
#define pdd(n, m) printf("%d %d\n", n, m)
#define pld(n) printf("%lld\n", n)
#define pldd(n, m) printf("%lld %lld\n", n, m)
#define sld(n) scanf("%lld", &n)
#define sldd(n, m) scanf("%lld%lld", &n, &m)
#define slddd(n, m, k) scanf("%lld%lld%lld", &n, &m, &k)
#define sf(n) scanf("%lf", &n)
#define sc(n) scanf("%c", &n)
#define sff(n, m) scanf("%lf%lf", &n, &m)
#define sfff(n, m, k) scanf("%lf%lf%lf", &n, &m, &k)
#define ss(str) scanf("%s", str)
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = n; i >= a; i--)
#define mem(a, n) memset(a, n, sizeof(a))
#define debug(x) cout << #x << ": " << x << endl
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define mod(x) ((x) % MOD)
#define gcd(a, b) __gcd(a, b)
#define lowbit(x) (x & -x)
typedef pair<int, int> PII;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int MOD = 1e9 + 7;
const double eps = 1e-9;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int inf = 0x3f3f3f3f;
inline int read()
{
int ret = 0, sgn = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
sgn = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
ret = ret * 10 + ch - '0';
ch = getchar();
}
return ret * sgn;
}
inline void Out(int a) //Êä³öÍâ¹Ò
{
if (a > 9)
Out(a / 10);
putchar(a % 10 + '0');
}

ll gcd(ll a, ll b)
{
return b == 0 ? a : gcd(b, a % b);
}

ll lcm(ll a, ll b)
{
return a * b / gcd(a, b);
}
///快速幂m^k%mod
ll qpow(ll a, ll b, ll mod)
{
if (a >= mod)
a = a % mod + mod;
ll ans = 1;
while (b)
{
if (b & 1)
{
ans = ans * a;
if (ans >= mod)
ans = ans % mod + mod;
}
a *= a;
if (a >= mod)
a = a % mod + mod;
b >>= 1;
}
return ans;
}

// 快速幂求逆元
int Fermat(int a, int p) //费马求a关于b的逆元
{
return qpow(a, p - 2, p);
}

///扩展欧几里得
int exgcd(int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
int g = exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - a / b * y;
return g;
}

///使用ecgcd求a的逆元x
int mod_reverse(int a, int p)
{
int d, x, y;
d = exgcd(a, p, x, y);
if (d == 1)
return (x % p + p) % p;
else
return -1;
}

///中国剩余定理模板0
ll china(int a[], int b[], int n) //a[]为除数,b[]为余数
{
int M = 1, y, x = 0;
for (int i = 0; i < n; ++i) //算出它们累乘的结果
M *= a[i];
for (int i = 0; i < n; ++i)
{
int w = M / a[i];
int tx = 0;
int t = exgcd(w, a[i], tx, y); //计算逆元
x = (x + w * (b[i] / t) * x) % M;
}
return (x + M) % M;
}

ll l, r;

ll solve(ll x)
{
ll ans = 0;
for (ll i = 1; i * i <= x; i++)
{
if (x % i == 0)
ans++;
if (x % i == 0 && x / i != i)
ans++;
}
return ans;
}

int main()
{
int t;
sd(t);
while (t--)
{
sldd(l, r);
ll x, ans = 0;
rep(i, l, r)
{
ll tmp = solve(i);
if (tmp > ans)
{
ans = tmp;
x = i;
}
}
printf("Between %lld and %lld, %lld has a maximum of %lld divisors.\n", l, r, x, ans);
}
return 0;
}