• Aucun résultat trouvé

A627. Partitions et concaténations Q1.

N/A
N/A
Protected

Academic year: 2022

Partager "A627. Partitions et concaténations Q1."

Copied!
2
0
0

Texte intégral

(1)

A627. Partitions et concaténations

Q1. Trouver l’entier 𝑛 à 3 chiffres qui est en même temps :

- la somme de deux entiers tels que 𝑛

2

s’obtient par concaténation de ces deux entiers

- la somme de trois entiers tels que 𝑛

3

s’obtient par concaténation de ces trois entiers dont l’un d’eux s’écrit par convention sous la forme 0𝑥𝑦.

Q2. Trouver tous les entiers 𝑛 à 6 chiffres qui sont la somme de deux entiers à 6 chiffres tels que 𝑛

2

s’obtient par concaténation de ces deux entiers.

Pour les plus courageux

q1. Trouver tous les entiers 𝑛 à 4 chiffres qui sont la somme de trois entiers à 4 chiffres tels que 𝑛

3

s’obtient par concaténation de ces trois entiers.

q2. Trouver tous les entiers 𝑛 à 3 chiffres qui sont la somme de quatre entiers non nuls tels que 𝑛

4

s’obtient par concaténation de ces quatre entiers.

Solution

Proposée par Fabien GIGANTE

Le petit programme C# en page suivante permet de trouver les réponses en quelques centièmes de seconde…

Q1.

𝟐𝟗𝟕=88+209=26+198+073

Q2. 318682=101558+217124 ; 329967=108878+221089 ; 351352=123448+227904 ; 356643=127194+229449 ; 390313=152344+237969 ; 461539=213018+248521 ; 466830=217930+248900 ; 499500=249500+250000 ; 500500=250500+250000 ; 533170=284270+248900 ; 538461=289940+248521 ; 609687=371718+237969 ; 643357=413908+229449 ; 648648=420744+227904 ; 670033=448944+221089 ; 681318=464194+217124 ; 791505=626480+165025 ; 812890=660790+152100 ; 818181=669420+148761 ; 851851=725650+126201 ; 857143=734694+122449

q1. 4949=1212+1388+2349 ; 5049=1287+1113+2649 ; 5455=1623+2457+1375 ; 5554=1713+2377+1464 ; 7172=3689+1035+2448

q2. 433=35+152+125+121

(2)

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

namespace Diophante {

static class A627 {

static IEnumerable<T> Single<T>(T v) { yield return v; }

static IEnumerable<IEnumerable<T>> WhereAll<T>(this IEnumerable<IEnumerable<T>> e, Func<T, bool> f) => e.Where(l => l.All(f));

static IEnumerable<ulong> Range(ulong a, ulong b) { for (ulong n = a; n <= b; n++) yield return n; } static ulong Sum(this IEnumerable<ulong> e) => e.Aggregate(0UL, (a, b) => a + b);

static bool AnyOfSum(this IEnumerable<IEnumerable<ulong>> e, ulong n) => e.Any(l => l.Sum() == n);

static IEnumerable<IEnumerable<ulong>> WhereSum(this IEnumerable<IEnumerable<ulong>> e, ulong n) => e.Where(l => l.Sum() == n);

static string Format<T>(this IEnumerable<T> e, char c = ' ') => e.Aggregate((string)null, (x, v) => x == null ? $"{v}" : $"{x}{c}{v}");

static string Format(this IEnumerable<IEnumerable<ulong>> e) => e.Select(l => $"{l.Sum()}={l.Format('+')}").Format();

static void FindRange(string s, ulong a, ulong b, Func<ulong, bool> cond)

=> Console.WriteLine(s + Range(a, b).AsParallel().AsOrdered().Where(cond).Format());

static void FindRange(string s, ulong a, ulong b, Func<ulong, IEnumerable<IEnumerable<ulong>>> select) => Console.WriteLine(s + Range(a, b).AsParallel().AsOrdered().SelectMany(select).Format());

static IEnumerable<IEnumerable<ulong>> Split(ulong n, int d, bool pad = false) {

if (d == 1) { yield return Single(n); yield break; }

for (ulong k = 10; n / k > 0; k *= 10) if (pad || k == 10 || n % k >= k / 10)

foreach (var l in Split(n / k, d - 1, pad)) yield return l.Concat(Single(n % k));

}

static void Main() {

Stopwatch w = new Stopwatch(); w.Start();

FindRange("Q1.", 100, 999, n => Split(n * n, 2).AnyOfSum(n) && Split(n * n * n, 3, true).AnyOfSum(n));

FindRange("Q2.", 100000, 999999, n => Split(n * n, 2).WhereAll(i => i >= 100000 && i <= 999999).WhereSum(n));

FindRange("q1.", 1000, 9999, n => Split(n * n * n, 3).WhereAll(i => i >= 1000 && i <= 9999).WhereSum(n));

FindRange("q2.", 100, 999, n => Split(n * n * n * n, 4).WhereAll(i => i > 0).WhereSum(n));

w.Stop(); Console.WriteLine($"Elapsed {w.ElapsedMilliseconds}ms");

} } }

Références

Documents relatifs

Q₁ - Les dimensions des côtés d’un quadrilatère sont des nombres entiers tels que l’une quelconque d’entre elles divise la somme des trois autres.. Démontrer que deux côtés

, Zig établit la suite des nombres égaux à la puissance quatrième des k premiers entiers pairs suc- cessifs &gt; 0 auxquels il ajoute chaque fois la fraction égale à un quart puis

De la même manière, Puce établit la suite des nombres égaux à la puissance quatrième des k premiers entiers impairs auxquels il ajoute chaque fois un quart et on obtient

[r]

Un tableur permet de vérifier ce résultat (on travaillera d’emblée sur les

Source : d'après olympiades internationales de mathématiques.. Et la

Après lecture de cet énoncé, nous pouvons chercher les différents reste de la division euclidienne de 2009^a par 10. Ceci nous donnera les différentes possibilités des derniers

Existe-t-il quatre entiers strictement positifs tels que la somme de leurs cubes soit égale à 10 100. Pour simplifier en baissant le degré de l'équation, on va chercher des entiers