a)
Code Block | ||
---|---|---|
| ||
function booleanresult = isPrime(N) boolean result = true; if N == 1 result = false; elseif N <= 3 && N~=1 result = true; else for a = 1:2:ceil(sqrt(N)-1) if mod(N, a) == 0 booleanresult = false; return; end end end end |
b)
104743.
c)
Code Block | ||
---|---|---|
| ||
function resprimeList = primegetPrimeList(aN) resprimeList = zeros(1, N); if isDevisable(a,2) res = 0; return; end for b = 1:2:ceil(sqrt(a)) if isDevisable(a,b) res = 0; break; end end end |
d) og e)
% 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)
Code Block | ||
---|---|---|
| ||
function result = primeNumN(N)
list = getPrimeList(N);
result = list(end);
end
|
d)
Code Block | ||
---|---|---|
| ||
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 | ||
Code Block | ||
les = fopen('prim.txt','r'); if les ==-1 break; end A = fscanf(les,'%f'); if isempty(A) % Om filen er tom skriver vi '2' inn i den. x = 2; A(1)= 2; skriv = fopen('prim.txt','w'); fprintf(skriv, '%20f\r\n',x); else % Ellers skriver vi inn alt, skriv = fopen('prim.txt','w'); x = A(end); fprintf(skriv, '%20f\r\n',A); end while (length(A) < 1500200) x = x + 1; i=1; prime = 1; while sqrt(x)>= A(i) if x/Amod(numberToCheck, primeList(i)) == floor(x/A(i))0 primeisPrime = 0false; break; end if ceil(sqrt(numberToCheck)) < primeList(i) i = i+1; endbreak end end if primeisPrime % Legger det tilpos i= listen,pos og til filen.+ 1; primeList(pos) fprintf(skriv, '%20f\r\n',x)= numberToCheck; end AnumberToCheck = numberToCheck [A; x]+ 2; end end fclose('all'); |