$24.99
• One submission per group
• Submit using eLearning
• What to include:
– README file including group members, other requirements specified below
– Lastnames.zip the code for the project
1 Problem definition
An interesting problem in arithmetic with deep implications to elliptic curve theory is the problem of finding perfect squares that are sums of consecutive squares. A classic example is the Pythagorean identity:
32 + 42 = 52 (1)
that reveals that the sum of squares of 3,4 is itself a square. A more interesting example is Lucas‘ Square Pyramid:
12 + 22 + ... + 242 = 702 (2)
In both of these examples, sums of squares of consecutive integers form the square of another integer.
The goal of this first project is to use F# and the actor model to build a good solution to this problem that runs well on multi-core machines.
2 Requirements
Input: The input provided (as command line to your program, e.g. my app) will be two numbers: N and k. The overall goal of your program is to find all k consecutive numbers starting at 1 and up to N, such that the sum of squares is itself a perfect square (square of an integer).
1
Output: Print, on independent lines, the first number in the sequence for each solution.
Example 1:
dotnet fsi proj1.fsx 3 2
3 indicates that sequences of length 2 with start point between 1 and 3 contain 3,4 as a solution since 32 + 42 = 52. Example 1:
dotnet fsi proj1.fsx 40 24
1 indicates that sequences of length 24 with start point between 1 and 40 contain 1,2,...,24 as a solution since 12 + 22 + ... + 242 = 702.
Actor modeling: In this project you have to use exclusively the actor facility in F# (projects that do not use multiple actors or use any other form of parallelism will receive no credit). A model similar to the one indicated in class for the problem of adding up a lot of numbers can be used here, in particular define worker actors that are given a range of problems to solve and a boss that keeps track of all the problems and perform the job assignment.
README file In the README file you have to include the following material:
• Size of the work unit that you determined results in best performance for your implementation and an explanation on how you determined it. Size of the work unit refers to the number of sub-problems that a worker gets in a single request from the boss.
• The result of running your program for dotnet fsi proj1.fsx 1000000 4
• The running time for the above as reported by time for the above, i.e. run time scala project1.scala 1000000 4 and report the time. The ratio of CPU time to REAL TIME tells you how many cores were effectively used in the computation. If your are close to 1 you have almost no parallelism (points will be subtracted).
• The largest problem you managed to solve.
3 BONUS – 15%
2