How to resolve the algorithm Arithmetic numbers step by step in the FreeBASIC programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Arithmetic numbers step by step in the FreeBASIC programming language

Table of Contents

Problem Statement

A positive integer n is an arithmetic number if the average of its positive divisors is also an integer. Clearly all odd primes p must be arithmetic numbers because their only divisors are 1 and p whose sum is even and hence their average must be an integer. However, the prime number 2 is not an arithmetic number because the average of its divisors is 1.5. 30 is an arithmetic number because its 7 divisors are: [1, 2, 3, 5, 6, 10, 15, 30], their sum is 72 and average 9 which is an integer. Calculate and show here:

  1. The first 100 arithmetic numbers.
  2. The xth arithmetic number where x = 1,000 and x = 10,000.
  3. How many of the first x arithmetic numbers are composite. Note that, technically, the arithmetic number 1 is neither prime nor composite. Carry out the same exercise in 2. and 3. above for x = 100,000 and x = 1,000,000.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Arithmetic numbers step by step in the FreeBASIC programming language

Source code in the freebasic programming language

' Rosetta Code problem: https://rosettacode.org/wiki/Arithmetic_numbers
' by Jjuanhdez, 06/2022

Dim As Double t0 = Timer
Dim As Integer N = 1, ArithCnt = 0, CompCnt = 0
Dim As Integer Div, DivCnt, Sum, Quot

Print "The first 100 arithmetic numbers are:"
Do
    Div = 1 : DivCnt = 0 : Sum = 0
    Do
        Quot = N / Div
        If Quot < Div Then Exit Do
        If Quot = Div AndAlso (N Mod Div) = 0 Then 'N is a square
            Sum += Quot 
            DivCnt += 1 
            Exit Do
        End If
        If (N Mod Div) = 0 Then
            Sum += Div + Quot
            DivCnt += 2
        End If
        Div += 1
    Loop
    
    If (Sum Mod DivCnt) = 0 Then                   'N is arithmetic
        ArithCnt += 1
        If ArithCnt <= 100 Then
            Print Using "####"; N;
            If (ArithCnt Mod 20) = 0 Then Print
        End If
        If DivCnt > 2 Then CompCnt += 1
        Select Case ArithCnt
        Case 1e3 
            Print Using !"\nThe #######th arithmetic number is #####,### up to which ###,### are composite."; ArithCnt; N; CompCnt
        Case 1e4, 1e5, 1e6
            Print Using "The #######th arithmetic number is #####,### up to which ###,### are composite."; ArithCnt; N; CompCnt
        End Select
    End If
    N += 1
Loop Until ArithCnt >= 1e6
Print !"\nTook"; Timer - t0; " seconds on i5 @3.20 GHz"
Sleep

  

You may also check:How to resolve the algorithm Execute HQ9+ step by step in the Go programming language
You may also check:How to resolve the algorithm Here document step by step in the Fortran programming language
You may also check:How to resolve the algorithm Classes step by step in the Groovy programming language
You may also check:How to resolve the algorithm Longest common subsequence step by step in the AutoHotkey programming language
You may also check:How to resolve the algorithm Compound data type step by step in the Swift programming language