Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Делимост на 3

Всичко, което си няма категория

Делимост на 3

Мнениеот nicksona » 07 Апр 2014, 20:16

Здравейте. Искам да попитам дали някой може ма ди обясни защо всяко число примерно 142536 като извадим от него записаното му в обратен ред в случая 635241 се дели точно на 3 винаги. Мисля че имаше все пак някакви изключения които бях открил, обаче после написах програмата и ако няма бъг би следвало че не би трябвало да има. Ако някой може да помогне с отговор ще съм му благодарен, а и ако някой намери изключение - да не се стиска :)

Пример:
142 536 - 635 241=-492 705:3=-164 235

А ето тук написах една програмка за тестване на числата дали се делят на 3 техните разлики. Ако дадено число не се дели точно на 3 би трябвало да го отпечата, обаче аз чаках 1 час и се отказах да чакам, защото не мисля че е възможно на двуядрения ми процесор да приключи дори и за 1 година. Нищо не отпечата. Ако някой вижда бъгове моля да сподели. Конзолна апликация на C# - под ръка ми беше Visual Studio-то. Евентоално ако някой се сеща за подобряване на алгоритъма може също да пише. Ето кода.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

public class Alpha
{

// This method that will be called when the thread is started
public void Beta()
{
check(0, 4223372036854775800);
}

public void Gama()
{
check(4223372036854775801, 9223372036854775800);
}

static void check(long startNumber,long endNumber)
{
long digit;

for (digit = startNumber; digit < endNumber; digit++)
{

if ((digit - reverse(digit)) % 3 != 0)
{
Console.WriteLine(digit);
}
}

}

static long reverse(long digit)
{
long r;
//ulong digit = 113240;
long left = digit;
long temp = 0;
while (left > 0)
{
r = left % 10;
temp = temp * 10 + r;
left = left / 10; //left = Math.floor(left / 10);
}
return temp;
}
};


namespace digitTester
{
class Program
{
static void Main(string[] args)
{

Alpha oAlpha = new Alpha();
Alpha uAlpha = new Alpha();


Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));
Thread uThread = new Thread(new ThreadStart(oAlpha.Gama));
// Start the thread
oThread.Start();
uThread.Start();

oThread.Join();
uThread.Join();

Console.WriteLine("Finish!");
Console.ReadLine();

}



}
}
nicksona
Нов
 
Мнения: 2
Регистриран на: 07 Апр 2014, 18:00
Рейтинг: 3

Re: Делимост на 3

Мнениеот Добромир Глухаров » 07 Апр 2014, 20:49

Число има същия остатък при деление на девет, както сумата от цифрите му, например при четирицифрено число:

[tex]\bar{abcd}-(a+b+c+d)=1000a+100b+10c+d-a-b-c-d=999a+99b+9c[/tex] - се дели на девет, следователно [tex]\bar{abcd}[/tex] дава същия остатък, както и [tex]a+b+c+d[/tex], за да може разликата им да даде остатък 0.

3 е делител на 9, следователно и за 3 важи правилото, че остатъците при деление на 3 на число и на сумата от цифрите му са равни.

Както и да разместим цифрите на число, сумата им, а следователно и остатъкът при деление на 3 (също и на 9) остават същите. Следователно като извадим числата, остатъкът при деление на 3 (9), става 0. Разликата се дели на 3 (9).
Аватар
Добромир Глухаров
Математик
 
Мнения: 2080
Регистриран на: 11 Яну 2010, 13:23
Рейтинг: 2178

Re: Делимост на 3

Мнениеот nicksona » 07 Апр 2014, 21:11

Ако числото ни е abcd = 1000a + 100b + 10c + d от него изваждаме dcba = 1000d + 100c + 10b +a

1000a + 100b + 10c + d -(1000d + 100c + 10b +a)=1000a + 100b + 10c + d - 1000d - 100c - 10b - a =999a + 90b - 90c - 999d

И от тук е ясно вече че числото се дели и на 3 и на 9 - може да се изкара 9 пред скоби. Ясно. Благодаря много :) това ме мъчеше от много време :D
nicksona
Нов
 
Мнения: 2
Регистриран на: 07 Апр 2014, 18:00
Рейтинг: 3


Назад към Алгебра



Кой е на линия

Регистрирани потребители: Davids, Google [Bot]

Форум за математика(архив)