Дайте два положительных целого числа a, b (1 <= a <= 30, 1 <= b <= 10000000) и определите два неповторимых набора L и R,
L = {x * y | 1 <= x <= a, 1 <= y <= b, x,y is integer}
R = {x ^ y | 1 <= x <= a, 1 <= y <= b, x,y is integer},
^ работает XOR
Для любых двух целых чисел: A∈L, B∈R, отформатируем B до n + 1 (n - десятичное число из числа b) десятичной цифры (заполните 0 перед B), а затем соедините B с конец A и получить новое целое AB.
Вычислить сумму всего порожденного целого AB (если сумма превышает, просто верните "sum mod 1000000007", mod означает модульную операцию)
Примечание: время вашего алгоритма не более 3 секунд
Мой алгоритм очень прост: мы можем легко получить максимальное число в множестве R, а элемент в R равен 0,1,2,3... maxXor (элемент max ( a, b) может быть не в R), используя хеш-таблицу, набор вычислений L. Но алгоритм потребляет 4 секунды, когда a = 30, b = 100000.
Приведите пример:
a = 2, b = 4, so
L = {1 * 1, 1 * 2, 1 * 3, 1 * 4, 2 * 1, 2 * 2, 2 * 3, 2 * 4} = {1, 2, 3, 4, 6, 8}
R = {1^1,1^2,1^3,1^4,2^1,2^2,2^3,2^4} = {0, 1, 2, 3, 5, 6}
Все сгенерированное целое число AB:
{
100, 101, 102, 103, 105, 106,
200, 201, 202, 203, 205, 206,
300, 301, 302, 303, 305, 306,
400, 401, 402, 403, 405, 406,
600, 601, 602, 603, 605, 606,
800, 801, 802, 803, 805, 806
}
сумма всех AB равна 14502