Practical numbers: Difference between revisions
Content added Content deleted
(→Composition of pure functions: Removed Haskell typing. Replaced with Python typing.) |
(Added C# and VB.NET entries) |
||
Line 18: | Line 18: | ||
* Show if 666 is a Practical number |
* Show if 666 is a Practical number |
||
=={{header|C#|CSharp}}== |
|||
<lang csharp>using System.Collections.Generic; using System.Linq; using static System.Console; |
|||
class Program { |
|||
static bool soas(int n, IEnumerable<int> f) { |
|||
if (n <= 0) return false; if (f.Contains(n)) return true; |
|||
switch(n.CompareTo(f.Sum())) { case 1: return false; case 0: return true; |
|||
case -1: var rf = f.Reverse().ToList(); var d = n - rf[0]; rf.RemoveAt(0); |
|||
return soas(d, rf) || soas(n, rf); } return true; } |
|||
static bool ip(int n) { var f = Enumerable.Range(1, n >> 1).Where(d => n % d == 0).ToList(); |
|||
return Enumerable.Range(1, n - 1).ToList().TrueForAll(i => soas(i, f)); } |
|||
static void Main() { |
|||
int c = 0, m = 333; for (int i = 1; i <= m; i += i == 1 ? 1 : 2) |
|||
if (ip(i) || i == 1) Write("{0,3} {1}", i, ++c % 10 == 0 ? "\n" : ""); |
|||
Write("\nFound {0} practical numbers between 1 and {1} inclusive.\n", c, m); |
|||
do Write("\n{0,5} is a{1}practical number.", |
|||
m = m < 500 ? m << 1 : m * 10 + 6, ip(m) ? " " : "n im"); while (m < 1e4); } }</lang> |
|||
{{out}} |
|||
<pre> 1 2 4 6 8 12 16 18 20 24 |
|||
28 30 32 36 40 42 48 54 56 60 |
|||
64 66 72 78 80 84 88 90 96 100 |
|||
104 108 112 120 126 128 132 140 144 150 |
|||
156 160 162 168 176 180 192 196 198 200 |
|||
204 208 210 216 220 224 228 234 240 252 |
|||
256 260 264 270 272 276 280 288 294 300 |
|||
304 306 308 312 320 324 330 |
|||
Found 77 practical numbers between 1 and 333 inclusive. |
|||
666 is a practical number. |
|||
6666 is a practical number. |
|||
66666 is an impractical number.</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |
||
Line 444: | Line 477: | ||
672 is practical? True |
672 is practical? True |
||
720 is practical? True</pre> |
720 is practical? True</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
{{trans|C#}} |
|||
<lang vbnet>Imports System.Collections.Generic, System.Linq, System.Console |
|||
Module Module1 |
|||
Function soas(ByVal n As Integer, ByVal f As IEnumerable(Of Integer)) As Boolean |
|||
If n <= 0 Then Return False Else If f.Contains(n) Then Return True |
|||
Select Case n.CompareTo(f.Sum()) |
|||
Case 1 : Return False : Case 0 : Return True |
|||
Case -1 : Dim rf As List(Of Integer) = f.Reverse().ToList() : Dim D as Integer = n - rf(0) |
|||
rf.RemoveAt(0) : Return soas(d, rf) OrElse soas(n, rf) |
|||
End Select : Return true |
|||
End Function |
|||
Function ip(ByVal n As Integer) As Boolean |
|||
Dim f As IEnumerable(Of Integer) = Enumerable.Range(1, n >> 1).Where(Function(d) n Mod d = 0).ToList() |
|||
Return Enumerable.Range(1, n - 1).ToList().TrueForAll(Function(i) soas(i, f)) |
|||
End Function |
|||
Sub Main() |
|||
Dim c As Integer = 0, m As Integer = 333, i As Integer = 1 : While i <= m |
|||
If ip(i) OrElse i = 1 Then c += 1 : Write("{0,3} {1}", i, If(c Mod 10 = 0, vbLf, "")) |
|||
i += If(i = 1, 1, 2) : End While |
|||
Write(vbLf & "Found {0} practical numbers between 1 and {1} inclusive." & vbLf, c, m) |
|||
Do : m = If(m < 500, m << 1, m * 10 + 6) |
|||
Write(vbLf & "{0,5} is a{1}practical number.", m, If(ip(m), " ", "n im")) : Loop While m < 1e4 |
|||
End Sub |
|||
End Module</lang> |
|||
{{out}} |
|||
Same as C# |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |