a)

function result = isPrime(N)
result = true;
if N == 1
    result = false;
elseif N <= 3 && N~=1
    result = true;
else
    for a = 2:(N-1) 
        if mod(N, a) == 0
            result = false;
            return;
        end
    end
end
end

b)

function primeList = getPrimeList(N)
primeList = zeros(1, N); % preallokerer
primeList(1) = 2;
pos = 1;
numberToCheck = 3;
while primeList(end) == 0
    isPrime = true;
    for i = 1 : pos
        if mod(numberToCheck, primeList(i)) == 0
            isPrime = false;
            break
        end 
		if ceil(sqrt(numberToCheck))  < primeList(i)
           break
      	end
    end
    if isPrime
    pos = pos + 1;
    primeList(pos) = numberToCheck;
    end
    numberToCheck = numberToCheck + 2;
end
end
 
% En alternativ approach, denne genererer ikke et bestemt antall primtall, men alle primtall opp til N
n = 1000000;
primes = 2:n;
for i = 2 : round(sqrt(n))
    primes(mod(primes,i) == 0 & primes ~= i) = [];
end


c)      

     

function result = primeNumN(N)
list = getPrimeList(N);
result = list(end);
end

d)

function primeList = mainPrimes()
primeList = loadPrimes();
while true
    terminate = input('Vil du avslutte programmet(Y) eller finne 100 primtall til(N)\n', 's');
    if strcmp(terminate, 'Y')
        break;
    end
    primeList = getPrimeList2(100, primeList);
    fprintf('Har nå funnet: %d primtall\n', length(primeList));
end
savePrimes(primeList);
end

 
function primeList = loadPrimes()
primeList = [];
fid = fopen('primes.txt', 'r');
pos = 1;
while ~feof(fid)
    line = fgetl(fid);
    primeList(pos) = str2num(line);
    pos = pos + 1;
end
end
 
function savePrimes(primeList)
fid = fopen('primes.txt', 'w');
for i = 1:length(primeList)
    fprintf(fid, '%d\n', primeList(i));
end
fclose(fid);
end

% I tillegg må vi modifisere getPrimeList2-funksjonen, slik at den kan ta inn lister.
 
function primeList = getPrimeList2(N, primeList)
pos = length(primeList);
numberToCheck = primeList(end) + 2;
primeList = [primeList, zeros(1,N)];
while primeList(end) == 0
    isPrime = true;
    for i = 1 : pos
        if mod(numberToCheck, primeList(i)) == 0
            isPrime = false;
            break
        end
		if ceil(sqrt(numberToCheck))  < primeList(i)
           break
      	end
    end
    if isPrime
    pos = pos + 1;
    primeList(pos) = numberToCheck;
    end
    numberToCheck = numberToCheck + 2;
end
end
  • No labels