diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 6d6e42f40..22c5e8b69 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "7"; public const string Build = "1"; - public const string Revision = "2786"; + public const string Revision = "2787"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 8700db485..1cedc34de 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=1 -%REVISION%=2786 %MINOR%=7 +%REVISION%=2787 +%COREVERSION%=1 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 8261a83dd..88691fddd 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.7.1.2786 +3.7.1.2787 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index c8758bb37..d087cdc5e 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.7.1.2786' +!define VERSION '3.7.1.2787' diff --git a/bin/Lib/School.pas b/bin/Lib/School.pas index e563ab2f7..9c1f8911f 100644 --- a/bin/Lib/School.pas +++ b/bin/Lib/School.pas @@ -53,9 +53,6 @@ function НОК(a, b: int64): int64; /// Возвращает НОД и НОК пары чисел function НОДНОК(a, b: int64): (int64, int64); -/// Разложение числа на простые множители -function Factorize(n: int64): List; - /// Разложение числа на простые множители function Factorize(n: integer): List; @@ -68,9 +65,6 @@ function FirstPrimes(n: integer): List; /// Возвращает список, содержащий цифры числа function Digits(n: int64): List; -/// Возвращает список делителей натурального числа -function Divizors(n: int64): List; - /// Возвращает список делителей натурального числа function Divizors(n: integer): List; @@ -406,27 +400,6 @@ end; {$region Factorize} -/// Разложение числа на простые множители -function Factorize(n: int64): List; -begin - n := Abs(n); - var i: int64 := 2; - var L := new List; - while i * i <= n do - if n mod i = 0 then - begin - L.Add(i); - n := n div i; - if n < i then - break - end - else - i += i = 2 ? 1 : 2; - if n > 1 then - L.Add(n); - Result := L -end; - /// Разложение числа на простые множители function Factorize(n: integer): List; begin @@ -448,10 +421,6 @@ begin Result := L end; -/// разложение числа на простые множители -function Factorize(Self: int64): List; extensionmethod := -Factorize(Self); - /// Разложение числа на простые множители function Factorize(Self: integer): List; extensionmethod := Factorize(Self); @@ -519,42 +488,22 @@ end; /// возвращает True, если число простое и False в противном случае function IsPrime(Self: integer): boolean; extensionmethod; -begin - if Self < 2 then - begin - Result := False; - exit - end; - var i := 2; - while i * i <= Self do - if Self mod i = 0 then - begin - Result := False; - exit - end - else - i += if i = 2 then 1 else 2; - Result := True -end; - -/// возвращает True, если число простое и False в противном случае -function IsPrime(Self: int64): boolean; extensionmethod; -begin - if Self < 2 then - begin - Result := False; - exit - end; - var i := int64(2); - while i * i <= Self do - if Self mod i = 0 then - begin - Result := False; - exit - end - else - i += if i = 2 then 1 else 2; - Result := True +begin + if Self = 2 then + Result := True + else if Self.IsEven or (Self <= 1) then + Result := False + else begin + var i := int64(3); + Result := True; + while i * i <= Self do + if Self mod i = 0 then begin + Result := False; + exit + end + else + i += 2 + end end; {$endregion} @@ -619,40 +568,10 @@ begin Result := L end; -/// возвращает список всех делителей натурального числа -function Divizors(n: int64): List; -begin - n := Abs(n); // foolproof - var L := new List; - L.Add(1); - L.Add(n); - if n > 3 then - begin - var k := int64(2); - while (k * k <= n) and (k < 3037000500) do - begin - if n mod k = 0 then - begin - var t := n div k; - L.Add(k); - if k < t then L.Add(t) - else break - end; - Inc(k) - end; - L.Sort; - end; - Result := L -end; - /// возвращает список делителей натурального числа function Divizors(Self: integer): List; extensionmethod := Divizors(Self); -/// возвращает список делителей натурального числа -function Divizors(Self: int64): List; extensionmethod := -Divizors(Self); - {$endregion} {$region Trig}