Код) Но по сравнению с перебором его побольше)
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static int Brute(int[] numbers )
{
int delta = numbers[numbers.Length - 1];
for (int value = delta; ; value += delta)
{
bool result = true;
foreach (var number in numbers)
{
if (value % number != 0)
{
result = false;
break;
}
}
if(result) return value;
}
}
#region GCD of two integers
public static int GCD(int Value1, int Value2)
{
int a; // local var1
int b; // local var2
int _gcd = 1; // Greates Common Divisor
try
{
// throw exception if any value=0
if (Value1 == 0 || Value2 == 0)
{
throw new ArgumentOutOfRangeException();
}
// assign absolute values to local vars
a = Math.Abs(Value1);
b = Math.Abs(Value2);
// if numbers are equal return the first
if (a == b) { return a; }
// if var "b" is GCD return "b"
else if (a > b && a % b == 0) { return b; }
// if var "a" is GCD return "a"
else if (b > a && b % a == 0) { return a; }
// Euclid algorithm to find GCD (a,b):
// estimated maximum iterations:
// 5* (number of dec digits in smallest number)
while (b != 0)
{
_gcd = b;
b = a % b;
a = _gcd;
}
return _gcd;
}
catch { throw; }
}
#endregion
#region LCM of two integers
public static int LCM(int Value1, int Value2)
{
try
{
int a = Math.Abs(Value1);
int b = Math.Abs(Value2);
// perform division first to avoid potential overflow
a = checked((int)(a / GCD(a, b)));
return checked((int)(a * b));
}
catch { throw; }
}
#endregion
static int Hz(int[] numbers)
{
int value = 1;
if (numbers.Length == 1) return numbers[0];
List<int> lcms=new List<int>();
for (int i = 0; i < numbers.Length-1; i++)
{
lcms.Add((int) LCM(numbers[i], numbers[i + 1]));
}
return Hz(lcms.ToArray());
}
static void Main(string[] args)
{
var numbers = Enumerable.Range(1, 20).ToList();
//start timer
Stopwatch timer = new Stopwatch();
timer.Start();
//array filtration
for(int right = 0; right<numbers.Count; right++)
{
int rightIndex = numbers.Count - 1 - right;
for (int left = 0; left < rightIndex; left++)
{
if (numbers[rightIndex] % numbers[left] == 0)
{
numbers.RemoveAt(left);
left--;
rightIndex--;
}
}
}
int value = Hz(numbers.ToArray());
//stop timer
timer.Stop();
//see what we've got after filtration and result
numbers.ForEach(Console.WriteLine);
Console.WriteLine("End in {0} ms. Value is {1}", timer.ElapsedMilliseconds, value);
}
}
}
Добавлено спустя 01 мин 14 с:
ну, просто, не понял зачем перебор, когда НОК требует примерно столько же мыслительной активности
Угу, только подумаешь над одним -30 минут, над другим -30 минут, а работать тогда когда?)))
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
Вы лучше попробуйте реализовать в 1С бухгалтерские проводки по более чем 1000 счетов и субсчетов в произвольной конфигурации, и по 3 субконто в каждом, да и план счетов при этом произвольный, не стандартный.
Не, паш, те, кто такие вещи разруливает - быдлокодеры. А те кто такие задачки решает - почетнейшие алгоритмисты олимпиадчики)))))
Ты что, местных стандартов не знаешь?
Добавлено спустя 30 с:
обслуживать тухлых экономистов - это скучно, а вот математика - это романтика и удовольствие.
Во-во-во... Пока я писал - они уже себя проявили)))))
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
тащить работу сюда — не надо.
здесь, если можно так выразиться, зона отдыха.
А это, если можно так выразиться, зона отмазок)))
мир, жвачка, перестройка, ok?
kill crash destroy
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
просто твоя задача понятна только некоторым.... А математические задачки...
А метематические задачки вроде существования положительных решений квази-линейных эллиптических уравнений с экспоненциальным возрастанием в эвклидовом пространстве, т.е. те за которые деньги платят - они всем понятны, Ога Ога ОГА!
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
А метематические задачки вроде существования положительных решений квази-линейных эллиптических уравнений с экспоненциальным возрастанием в эвклидовом пространстве, т.е. те за которые деньги платят - они всем понятны, Ога Ога ОГА!
Вы таки думаете, что задачки в этой теме будут
всем понятны
Вы уверены в этом?
На этом форуме возможно да. Но если взять людей за его пределами, т.е. действительно всех. Внезапно выяснится, что нужно ЗНАТЬ минимум 1 язык программирования, иметь определенный опыт, аналитические и творческие способности, ну и МОТИВАЦИЮ решать такие задачи.
"Ненависть к Microsoft является болезнью" (с) Линус Торвальдс
Неактивен
Банальный VBA
ностальгия...
уже давно не кодил
Не ламерствуй лукаво.
"А петь мне нельзя - постановление суда" (с) Бендер
Неактивен
Гареев Станислав пишет:уже давно не кодил
Что мешает заниматься этим в свободное от работы время? Хотя бы для поддержания мастерства.
Добавлено спустя 02 мин 52 с:
Skipper_gmr пишет:Но если взять людей за его пределами, т.е. действительно всех. Внезапно выяснится, что нужно ЗНАТЬ минимум 1 язык программирования, иметь определенный опыт, аналитические и творческие способности, ну и МОТИВАЦИЮ решать такие задачи.
Мне вот интересно, на кого ты в данный момент наезжаешь? У луноходов главное априори - "Исходный код открыт, его можно поправить!" Следовательно, они должны знать, как минимум, один язык программирования - чтобы иметь возможность хоть в каком-то исходном коде разобраться и его поправить. Или я что-то не так понимаю?
Не обязательно. Можно править текст (скажем переводить интерфейс или справку).
Можно править графику (улучшать скажем иконки или другое оформление).
Да мало ли вещей которые может делать человек не знающий ни одного языка программирования...
- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!
Неактивен
Нормальные программисты квалифицированно решают поставленную задачу.
Ухты ёлки.. мб я на своем острове отстал от жизни, но всегда считал, подписывание имен переменных иначе, чем на английском, дурным тоном. + Как я уточнил выше, "смысл решения этих задач в том, чтобы само решение состояло из минимального числа итераций." Т.е. перебор "в лоб" не подходит
pavel2403, ты сугубо Мистер Многосрёт Вот решишь предложенную Майором задачу http://euler.jakumo.org/problems/view/340.html и тогда мы дружно признаем, что ты крутой авторитет
А пока расслабляем мозг простыми заданиями.
Задачу http://euler.jakumo.org/problems/view/4.html на перле я решил вот так:
#!/usr/bin/perl -w
$done=0;
$n=1;
$i=0;
$c=0;
$lower[8]=[[1,9],[3,3],[7,7]];
$lower[7]=[[1,8],[2,4],[2,9],[3,6],[4,7],[6,8]];
$lower[6]=[[1,7],[3,9]];
$lower[5]=[[1,6],[2,3],[2,8],[4,4],[4,9],[6,6],[7,8]];
$lower[4]=[[1,5],[3,5],[5,5],[7,5],[9,5]];
$lower[3]=[[1,4],[2,2],[2,7],[3,8],[4,6],[6,9],[8,8]];
$lower[2]=[[1,3],[9,7]];
$lower[1]=[[1,2],[2,6],[3,4],[4,8],[6,7],[8,9]];
$lower[0]=[[1,1],[3,7],[9,9]];
for($n=9;$n>0;$n--){
if($done){last;}
for($i=9;$i>-1;$i--){
if($done){last;}
for($c=9;$c>-1;$c--){
if($done){last;}
my $pol=($n*100000+$i*10000+$c*1000+$c*100+$i*10+$n);
$e=990;
if(substr("$pol",5)==9){$e=$e+3;}
while($e>100){
if(!($pol % $e)){
$z=$pol/$e;
if(length("$z")==3){
print "The palindrom is $pol! Sides are $e and $z\n"; $done=1;
last;
}
}
$e=$e-10;
}
}
}
}
Есть ли желающие решить ее с еще меньшим числом итераций?)
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Неактивен
Мне вот интересно, на кого ты в данный момент наезжаешь?
Просто излагаю свои мысли, а низзя шоле?
"Ненависть к Microsoft является болезнью" (с) Линус Торвальдс
Неактивен
Что мешает заниматься этим в свободное от работы время?
Любая идея из приходящих мне в голову кажется не оригинальной и несовершенной.
Да и личные проблемы не дают сосредоточиться. Близок к отчаянию.
Не ламерствуй лукаво.
"А петь мне нельзя - постановление суда" (с) Бендер
Неактивен
Lord_Evil, не понял ваш скрипт. Имелось в виду
#!/usr/bin/perl -w
for ($i=999; $i>900; $i--)
{
# Формируем палиндром
@symbols = split(//,$i);
$palindrome = $i.$symbols[2].$symbols[1].$symbols[0];
# Ищем наибольший делитель
for ($j=999; $j>900; $j--)
{
if( ($palindrome % $j == 0)&&($palindrome / $j < 1000) )
{
print "$palindrome = $j * ", $palindrome/$j," \n";
exit();
}
}
}
нечто вот такое?
Неактивен