{ "cells": [ { "cell_type": "markdown", "id": "aac67a5d", "metadata": {}, "source": [ "# [Sub-string Divisibility](https://projecteuler.net/problem=43)\n", "\n", "If you *really* wanted to, you could work this out with pen and paper using [divisibility rules](https://en.wikipedia.org/wiki/Divisibility_rule). Alternatively, it's easy to brute force. First we write a function to test for the given property." ] }, { "cell_type": "code", "execution_count": 1, "id": "71136ed1", "metadata": {}, "outputs": [], "source": [ "def is_substring_divisible(digits):\n", " for idx, divisor in enumerate((2, 3, 5, 7, 11, 13, 17), start=1):\n", " x, y, z = digits[idx:idx+3]\n", " n = 100*x + 10*y + z\n", " if n % divisor != 0:\n", " return False\n", " \n", " return True" ] }, { "cell_type": "markdown", "id": "3560bcb4", "metadata": {}, "source": [ "Then we test every permutation of 0 through 9. There's $10! = 3628800$ such permutations, which may seem like a lot, and you could apply some logic to reduce the search space some (e.g. $d_4$ must be 0, 2, 4, 6, or 8), but the test runs relatively quickly for each permutation as-is." ] }, { "cell_type": "code", "execution_count": 2, "id": "dc866d6b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1406357289, 1430952867, 1460357289, 4106357289, 4130952867, 4160357289}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from itertools import permutations\n", "\n", "numbers = set()\n", "for digits in permutations((0,1,2,3,4,5,6,7,8,9)):\n", " if is_substring_divisible(digits):\n", " n = sum(10^k * digit for (k, digit) in enumerate(reversed(digits)))\n", " numbers.add(n)\n", " \n", "numbers" ] }, { "cell_type": "markdown", "id": "fca588e4", "metadata": {}, "source": [ "Turns out there's only six of these numbers." ] }, { "cell_type": "code", "execution_count": 3, "id": "b6275692", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16695334890" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(numbers)" ] }, { "cell_type": "markdown", "id": "bfaa46b7", "metadata": {}, "source": [ "## Relevant sequences\n", "* Pandigital numbers: [A050278](https://oeis.org/A050278)\n", "\n", "#### Copyright (C) 2025 filifa\n", "\n", "This work is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International license](https://creativecommons.org/licenses/by-sa/4.0/) and the [BSD Zero Clause license](https://spdx.org/licenses/0BSD.html)." ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.5", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }