<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Steinsland - informatikkstudent og webutvikler &#187; matematikk</title>
	<atom:link href="http://davidsteinsland.net/emneord/matematikk/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidsteinsland.net</link>
	<description>Personlig blogg om programmering og andre uinteressante emner</description>
	<lastBuildDate>Thu, 26 Apr 2012 10:49:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Java: Primtallgenerering og -faktorisering</title>
		<link>http://davidsteinsland.net/2011/10/java-primtallgenerering-og-faktorisering/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=java-primtallgenerering-og-faktorisering</link>
		<comments>http://davidsteinsland.net/2011/10/java-primtallgenerering-og-faktorisering/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 21:41:10 +0000</pubDate>
		<dc:creator>David Steinsland</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[diskret matematikk]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[matematikk]]></category>

		<guid isPermaLink="false">http://blog.davidsteinsland.net/?p=592</guid>
		<description><![CDATA[Hvordan kan man finne alle primtall mindre enn k? Hvordan sjekke om et gitt heltall n er primtall? Hvordan kan vi primtallsfaktorisere ethvert tall? Først av alt må man etablere et par matematiske sannheter: Et primtall er et helt tall større enn 1 som bare er delelig med seg selv og med 1 Et heltall k er også [...]]]></description>
			<content:encoded><![CDATA[<p>Hvordan kan man finne alle primtall mindre enn <em>k</em>? Hvordan sjekke om et gitt heltall <em>n</em> er primtall? Hvordan kan vi primtallsfaktorisere ethvert tall?</p>
<h3>Først av alt må man etablere et par matematiske sannheter:</h3>
<ol>
<li>Et primtall er et helt tall større enn 1 som bare er delelig med seg selv og med 1</li>
<li>Et heltall <em>k</em> er også primtall dersom det ikke er delelig med andre primtall mindre enn eller lik kvadratrota til <em>k</em>.</li>
<li>Et hvert heltall større enn 1 kan skrives som produktet av ett eller flere primtall.</li>
</ol>
<h3>Så, hvordan kan man finne et primtall?</h3>
<ol>
<li> Gitt et heltall <em>k</em>, begynner vi å sjekke om tallet er delelig med det minste primtallet, 2.</li>
<li>Om det er delelig, kan vi trekke konklusjonen om at tallet ikke er primtall.</li>
<li>Dersom det ikke er delelig, går vi videre til 3. Dette gjentar vi for alle primtall <img src='http://s0.wp.com/latex.php?latex=%5Cleq+%5Csqrt%7Bk%7D&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='&#92;leq &#92;sqrt{k}' title='&#92;leq &#92;sqrt{k}' class='latex' /><em>.</em></li>
<li>Om ingen tall er delelige, er tallet et primtall.</li>
</ol>
<p>Vi kan nå begynne å skrive Java-koden vår, og en kan for eksempel ende opp med noe slikt:</p>
<pre class="brush: java; title: ; notranslate">

public boolean isPrime (int n)
{
	int q = (int) Math.sqrt (n);

	boolean isPrime = true;

	for (int i = 2; i &lt; q; i++)
 	{
		if (n % i == 0)
		{
			return false;
		}
	}

	return true;
}
</pre>
<p>Det første vi gjør er å ta kvadratrota til heltallet vårt. Deretter kjører vi gjennom alle heltall <img src='http://s0.wp.com/latex.php?latex=2+%5Cleq+i+%5Cleq+%5Csqrt%7Bn%7D&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='2 &#92;leq i &#92;leq &#92;sqrt{n}' title='2 &#92;leq i &#92;leq &#92;sqrt{n}' class='latex' />. Dersom tallet skulle være delelig med et annet, da er det ikke et primtall. Når løkken er gjennomført, vet vi at ingen tall er delelige og at heltallet vårt er primtall.</p>
<h3>Primtallsfaktorisering</h3>
<p>Ved aritmetikkens fundamentalteorem vet vi at et heltall større enn 1 er enten et primtall, eller et produkt av ett eller flere primtall.</p>
<p>For eksempel er: <img src='http://s0.wp.com/latex.php?latex=7007+%3D+7+%5Ccdot+7+%5Ccdot+11+%5Ccdot+13&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='7007 = 7 &#92;cdot 7 &#92;cdot 11 &#92;cdot 13' title='7007 = 7 &#92;cdot 7 &#92;cdot 11 &#92;cdot 13' class='latex' /></p>
<pre class="brush: java; title: ; notranslate">

public Integer[] primeFactorization (int a)
{
	ArrayList factors = new ArrayList();

	// fetch primes less than or equal to sqrt(a).
	// if no primes are returned, the number itself is a prime.
	Integer[] primes = primes ((int)Math.sqrt(a));

	int i = 0;
	while (i &lt; primes.length)
 	{
 		int p = primes[i];
 		if (Arrays.asList (primes).contains(a) || isPrime (a))
 		{
 			// the remaining number is now a prime.
 			break;
 		}
 		if (a % p == 0)
 		{
 			// add the prime to our list, and execute the division
 			factors.add (p);
 			a = a / p;
 		}
 		else
 		{
 			// Continue to next prime, if the current one does not
 			// divide
 			i++;
 		}
 	}
 	// The number than remains should be a prime itself.
 	if (a &gt; 1)
	{
		factors.add (a);
	}

	return (Integer[]) factors.toArray(new Integer[factors.size()]);
}
</pre>
<p>Her ble det kanskje litt komplisert med det første, men prosessen er igrunn ganske enkel:</p>
<ol>
<li><em>primes</em>() til å gi oss et int-array med primtall (bruker funksjonen <em>isPrime</em>())</li>
<li>Deretter går vi gjennom alle primtallene, og sjekker om tallet <em>a</em> er delelig med <em>p</em>. Dersom det er delelig, så legger vi primtallet <em>p</em> i samlingen vår og utfører divisjonen <img src='http://s0.wp.com/latex.php?latex=%5Cfrac%7Ba%7D%7Bp%7D&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='&#92;frac{a}{p}' title='&#92;frac{a}{p}' class='latex' />.</li>
<li>I neste runde tester vi enten det samme primtallet som i forrige runde, eller så tester vi det neste primtallet. Det er først når det gjeldende primtallet ikke er delelig, at vi går til neste.</li>
<li>Til slutt skal det resterende tallet selv være et primtall, men vi ønsker ikke å inkludere tallet 1 som faktor.</li>
</ol>
<h3>Eksempel</h3>
<p>Om vi bruker tallet 7007 om igjen, så vil vi i Java-funksjonen få følgende primtall:</p>
<p><img src='http://s0.wp.com/latex.php?latex=%7B2%2C+3%2C+5%2C+7%2C+11%2C+13%2C+17%2C+19%2C+23%2C+29%2C+31%2C+37%2C+41%2C+43%2C+47%2C+53%2C+59%2C+61%2C+67%2C+71%2C+73%2C+79%2C+83%7D&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83}' title='{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83}' class='latex' />. Det er alle primtall som er mindre enn kvadratroten til 7007.</p>
<p>Deretter tester vi først om 2 er delelig med 7007. Det er det ikke, så vi går videre til neste primtall. Det er først når vi kommer til 7 at vi finner et primtall som er delelig med 7007.</p>
<p>Vi legger da til tallet 7 i listen vår, og utfører divisjonen <img src='http://s0.wp.com/latex.php?latex=%5Cfrac%7B7007%7D%7B7%7D+%3D+1001&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='&#92;frac{7007}{7} = 1001' title='&#92;frac{7007}{7} = 1001' class='latex' />. I neste runde tester vi tallet 7 en gang til, og igjen så er det delelig. Vi utfører da <img src='http://s0.wp.com/latex.php?latex=%5Cfrac%7B1001%7D%7B7%7D+%3D+143&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='&#92;frac{1001}{7} = 143' title='&#92;frac{1001}{7} = 143' class='latex' />.</p>
<p>Når vi i påfølgende runde tester 7 igjen, finner vi ut at det ikke lengre er delelig. Men det er primtallet 11! Det siste primtallet vil da være 13.</p>
<p>Dette gir oss følgende i resultat: <img src='http://s0.wp.com/latex.php?latex=%7B7%2C+7%2C+11%2C+13%7D&#038;bg=ffffff&#038;fg=000&#038;s=0' alt='{7, 7, 11, 13}' title='{7, 7, 11, 13}' class='latex' /> som forteller oss hvilke primtallsfaktorer som gir 7007.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsteinsland.net/2011/10/java-primtallgenerering-og-faktorisering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fagvalg 2010: Valget er tatt</title>
		<link>http://davidsteinsland.net/2010/01/fagvalg-2010-valget-er-tatt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fagvalg-2010-valget-er-tatt</link>
		<comments>http://davidsteinsland.net/2010/01/fagvalg-2010-valget-er-tatt/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 17:36:13 +0000</pubDate>
		<dc:creator>David Steinsland</dc:creator>
				<category><![CDATA[Skole]]></category>
		<category><![CDATA[fag]]></category>
		<category><![CDATA[informasjonsteknologi]]></category>
		<category><![CDATA[matematikk]]></category>
		<category><![CDATA[programfag]]></category>
		<category><![CDATA[vg3]]></category>

		<guid isPermaLink="false">http://blog.davidsteinsland.net/?p=199</guid>
		<description><![CDATA[Som jeg skrev tidligere, uttrykket jeg min fortvilelse da jeg fant ut at det var ingen måte jeg kunne unngå matematikk (R2) i tredjeklasse til høsten. Nå, derimot, ser jeg løsningen og er villig til å ta den. Da jeg tilfeldigvis gikk gjennom fagplanen for Informasjonsteknologi 1, som også tilfeldigvis er et realfag,  så jeg [...]]]></description>
			<content:encoded><![CDATA[<p>Som jeg <a href="http://davidsteinsland.net/2010/01/fagvalg-2010/">skrev tidligere</a>, uttrykket jeg min fortvilelse da jeg fant ut at det var ingen måte jeg kunne unngå matematikk (R2) i tredjeklasse til høsten.</p>
<p>Nå, derimot, ser jeg løsningen og er villig til å ta den.</p>
<p>Da jeg tilfeldigvis gikk gjennom fagplanen for <a href="http://www.udir.no/grep/Fag/?fagid=475558">Informasjonsteknologi 1</a>, som også <em>tilfeldigvis</em> er et realfag,  så jeg at jeg kunne mesteparten av pensumet allerede. Siden reglene sier at jeg er nødt til å fortsette med minst to realfag i tredjeklasse som jeg tar nå i andreklasse, meldte jeg meg opp som privatist i IT-1 med eksamen til våren.</p>
<p>Da løste plutselig alt seg!</p>
<p>Jeg ble litt forbauset da jeg så at timeantallet mitt nå er øket til 37 timer (mot 30 timer/uke som er påkrevd). Dette betyr at jeg har så mange timer til overs, at jeg kun trenger ta to programfag til neste år, og ikke tre som jeg ellers måtte ha gjort (2 realfag + 1 fra et annet programområde).</p>
<p>Videre betyr dette at jeg da kan fortsette med Kjemi 2 og Informasjonsteknologi 2. Jeg er da nødt til å ta sistnevnte som privatist, men det vil gi meg 10 timer mindre pr. uke enn alle andre, da jeg kun har <strong>ett programfag i hele tredjeklasse</strong> (på skolen da, vel å merke). Sweet!</p>
<p>PS: Jeg har ingenting i mot matematikk; faget er både interessant og utfordrende (kom for øvrig på tredjeplass på Abelkonkurransen, runde 1). Det som foreligger bak, er at jeg ikke trenger R2 til de studiene jeg har tenkt å ta (i skrivende stund). Selvsagt er det nyttig med matematikk, og jeg hadde sikkert ikke hatt vondt av å tatt R2 heller.</p>
<p>Nå har jeg iallfall åpnet dørene, slik jeg har muligheten til å ta R2 eller velge det bort. Istedenfor å bli <em>presset</em> til å ta et fag jeg ikke ønsker, kan jeg nå velge/vrake det i fred og ro.</p>
<p>Om det er flere som skulle havne i samme situasjon som meg: ta kontakt med Eksamenskontoret/privatistkontoret i hjemfylket ditt; de kan svare på det meste!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsteinsland.net/2010/01/fagvalg-2010-valget-er-tatt/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

