An app for learning the 1-100 times tables Do anyone knows an app for android that help you learn $1$ to $100$ times table? I tried a few but none was quite what I need. I want it to:

*

*Ask answers for two digit by one digit multiplication. $23 \times 7$, $39 \times 3$ and so on.

*Ask based on a range ($10$-$19$, $20$-$29$, $30$-$39$ and so on), so that I can keep training that specific range for how long I want. I plan to train a few tables each day so I master all on a month.

*To type the answer instead of selecting it from the screen. This is really important because it forces me to think.

Ps.: To anyone wondering why, learning 1-100 tables will allow for much faster calculations. Almost twice as fast actually. 2356x43 break in four steps instead of eight (plus the sum, of course). But the biggest advantage comes in doing division and more complex mental arithmetic. Together with learning squares and cubes, it really helps calculation.
 A: Here is a simple HTML / JavaScript program that can be used for multiplication drill. It should work on all Web browsers. It doesn't depend on any external files, so you can save it on your computer or mobile device, and it will work even if you're not online. I've tested it in Firefox on Linux and in the Chrome & Samsung browsers on my Galaxy S9 phone.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Multiplication Drill</title>
</head>
<body>
<h3>Multiplication Drill</h3>
<input id="aLo" type="number" value="2"><label for="aLo">Low A</label><br>
<input id="aHi" type="number" value="99"><label for="aHi">High A</label><br>
<input id="bLo" type="number" value="2"><label for="bLo">Low B</label><br>
<input id="bHi" type="number" value="99"><label for="bHi">High B</label><br>

<button onclick="reset()">Reset</button>
<br><br>

<div id="main">
<div id="quiz"></div>
<input id="response" type="number" onchange="check(+this.value)">
<label for="response">Answer</label>
<br><br>
<div id="product"></div>
</div>
</body>
<script>
var product = 0, right = 0, wrong = 0;

function ById(s){
    return document.getElementById(s);
}

function getRandom(min, max){
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function go(){
    let aLo = +ById("aLo").value, aHi = +ById("aHi").value,
          bLo = +ById("bLo").value, bHi = +ById("bHi").value;

    let a = getRandom(aLo, aHi), b = getRandom(bLo, bHi);
    product = a * b;
    ById("response").value = "";

    let out = "Right: " + right + " Wrong: " + wrong + " Total: " + (right + wrong) + "\n\n";
    out += a + " × " + b;
    ById("quiz").innerText = out;
}

function check(val){
    ById("product").innerText = "Previous: " + product;
    if (val == product){
        right += 1;
        ById("main").style = "background-color: #cfc";
    }
    else{
        wrong += 1;
        ById("main").style = "background-color: #fcc";
    }
    go();
}

function reset(){
    right = wrong = 0;
    ById("main").style = "background-color: #fff";
    go();
}

reset();
</script>
</html>

You can simply copy the above code to your device (and save it to a file with the .htm or .html extension), or you can download it from GitHub; on a mobile device you need to view the Desktop site to see the "Download ZIP" button. There's also a live version, which runs on the SageMathCell server, linked in a comment at the bottom of the GitHub page, if you want to test the program or use it without saving it to your device.
The user interface is very basic, it could easily be modified to look a lot prettier, using CSS. And of course various enhancements are possible, eg a timing function.

There's a lot of data to learn if you want to memorise the times tables up to 99 × 99! There are various arithmetic techniques that can be used to speed up two digit multiplication without having to memorise quite so much data. But of course such techniques will be slightly slower.
For example, you can multiply two numbers close to 100 with
$$(100-a)(100-b) = 10000 - 100(a+b) + ab = 100(100-a-b) + ab$$
Similarly,
$$(50+a)(50+b) = 2500 + 50(a+b) + ab = 100(25+(a+b)/2) + ab$$
Another approach is to use the difference of two squares.
$$(u+v)(u-v) = u^2 - v^2$$
Let $$a=u+v, b=u-v$$
Then
$$u=(a+b)/2, v=(a-b)/2$$
Eg,
$$24 × 18 = (21+3)(21-3) = 21^2-3^2 = 441-9 = 432$$
This method works best when $a$ & $b$ have the same parity (both odd or both even).
