Priemtweelingen
Ik ben aan het experimenteren met php.
Ik wil nu priemtweelingen maken, maar het werkt niet.
Zien jullie een fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<u><h3>Priemtweelingen</h3></u>
Vul hieronder de range van waar tot waar hij priemtweelingen moet gaan zoeken</br>
<div style="width: 500px; border: 1px solid black; margin: 8px; padding: 8px; "> <!-- opmaak van de rand -->
<form name="form2" method="post" action="priemtweelingen2.php"> <!-- hieruit haalt het phpscript "priemtweelingen2.php" de waardes -->
<p>
<table border="0">
<tr>
<td>
Begin getal:
</td>
<td>
<input type="text" name="begin_1" style="width: 150px;"> <!-- opmaak teksvakje plus naam die het vakje krijgt / hier wordt de beginwaarde ingegeven-->
</td>
</tr>
<tr>
<td>
Eind getal:
</td>
<td>
<input align="middle" type="text" name="begin_2" style="width: 150px;"> <!-- opmaak teksvakje plus naam die het vakje krijgt / hier wordt de eindwaarde ingegeven-->
</td>
</tr>
</table>
</p>
<p>
<input type="submit" value="bekijk priemtweelingen"> <!-- stuurt de waardes door naar bovengenoemde address in de "action" -->
</p>
</form>
</div>
Vul hieronder de range van waar tot waar hij priemtweelingen moet gaan zoeken</br>
<div style="width: 500px; border: 1px solid black; margin: 8px; padding: 8px; "> <!-- opmaak van de rand -->
<form name="form2" method="post" action="priemtweelingen2.php"> <!-- hieruit haalt het phpscript "priemtweelingen2.php" de waardes -->
<p>
<table border="0">
<tr>
<td>
Begin getal:
</td>
<td>
<input type="text" name="begin_1" style="width: 150px;"> <!-- opmaak teksvakje plus naam die het vakje krijgt / hier wordt de beginwaarde ingegeven-->
</td>
</tr>
<tr>
<td>
Eind getal:
</td>
<td>
<input align="middle" type="text" name="begin_2" style="width: 150px;"> <!-- opmaak teksvakje plus naam die het vakje krijgt / hier wordt de eindwaarde ingegeven-->
</td>
</tr>
</table>
</p>
<p>
<input type="submit" value="bekijk priemtweelingen"> <!-- stuurt de waardes door naar bovengenoemde address in de "action" -->
</p>
</form>
</div>
en mijn php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<html>
<head>
</head>
<body>
<?php
$begingetal = $_POST["begin_1"];
$eindgetal = $_POST["begin_2"];
for($i=$begingetal;$i<$eindgetal;$i++)
{
for($j=1;$j<$eindgetal;$j++)
{
$deel = $i/$j;
if(is_int($deel)) //"is_int" kijkt of er een numerieke
{
$var[$i][$j] = $deel;
}
}
}
foreach($var as $key => $waarde)
{
if((count($var[$key]) == 1 || (count($var[$key]) == 2)) && (count($var[$key+2]) == 1 || (count($var[$key+2]) == 2)))
{
$priemgetallen = $key;
echo "Dit zijn ze $priemgetallen <br />";
}
}
?>
</body>
</html>
<head>
</head>
<body>
<?php
$begingetal = $_POST["begin_1"];
$eindgetal = $_POST["begin_2"];
for($i=$begingetal;$i<$eindgetal;$i++)
{
for($j=1;$j<$eindgetal;$j++)
{
$deel = $i/$j;
if(is_int($deel)) //"is_int" kijkt of er een numerieke
{
$var[$i][$j] = $deel;
}
}
}
foreach($var as $key => $waarde)
{
if((count($var[$key]) == 1 || (count($var[$key]) == 2)) && (count($var[$key+2]) == 1 || (count($var[$key+2]) == 2)))
{
$priemgetallen = $key;
echo "Dit zijn ze $priemgetallen <br />";
}
}
?>
</body>
</html>
Bedankt alvast voor de hulp!
Mvg,
Camiel en Stan
Je zoekt naar twee priemgetallen ... dan wil je toch een functie hebben die vraagt of 1 getal een priemgetal is, niet?
Stel, de buitenste lus staat op 987.
Dan wil je toch dit doen:
if (is_priemgetal(987) && is_priemgetal(989))
----
Dit is mijn versie, die ik zonet in mekaar heb gestoken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$max = 10000;
for ($i=0; ; $i++) {
if (is_prime($i) && is_prime($i + 2)) {
echo $i .' '. ($i + 2) .'<br>';
}
if ($i > $max) {
break;
}
}
function is_prime($number) {
$divisors = 0; // het aantal delers.
//Een priemgetal heeft twee verschillende delers; 1 en zich zelf (1 is geen priemgetal)
if ($number < 2) {
return false;
}
// laat ons 1 en $number zelf niet tellen. Dan is een priemgetal true indien $divisors 0 blijft.
// Een deler kan nooit groter zijn dan de helft van het nummer. Laat ons dus stoppen met tellen vanaf de helft
$half = floor($number / 2) + 1; // marge van 1 toevoegen
for ($i=2; $i<$half; $i++) {
if ($number % $i === 0) { // $a % $b | Modulus | Remainder of $a divided by $b.
return false;
}
}
return true;
}
?>
$max = 10000;
for ($i=0; ; $i++) {
if (is_prime($i) && is_prime($i + 2)) {
echo $i .' '. ($i + 2) .'<br>';
}
if ($i > $max) {
break;
}
}
function is_prime($number) {
$divisors = 0; // het aantal delers.
//Een priemgetal heeft twee verschillende delers; 1 en zich zelf (1 is geen priemgetal)
if ($number < 2) {
return false;
}
// laat ons 1 en $number zelf niet tellen. Dan is een priemgetal true indien $divisors 0 blijft.
// Een deler kan nooit groter zijn dan de helft van het nummer. Laat ons dus stoppen met tellen vanaf de helft
$half = floor($number / 2) + 1; // marge van 1 toevoegen
for ($i=2; $i<$half; $i++) {
if ($number % $i === 0) { // $a % $b | Modulus | Remainder of $a divided by $b.
return false;
}
}
return true;
}
?>
EDIT: Tja, die $divisors is eigenlijk helemaal niet nodig in deze context
Gewijzigd op 06/12/2013 11:25:45 door Kris Peeters
gmp_nextprime($i) direct het volgende priemgetal na priemgetal $i te zoeken. Moet je alleen wel even GMP installeren.
Ik kwam op ongeveer dezelfde oplossing uit als Kris. Volgens mij kun je het algoritme optimaliseren door niet met $i++ te controleren of de volgende integer een priemgetal is, maar met Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Priemtweelingen</title>
</head>
<body>
<?php
if (
isset($_GET['begingetal'], $_GET['eindgetal'])
&& is_numeric($_GET['begingetal'])
&& is_numeric($_GET['eindgetal'])
) {
for ($i = (int) $_GET['begingetal']; $i <= $_GET['eindgetal']; $i++) {
if (isPrime($i)) {
$j = $i + 2;
if (isPrime($j)) {
echo '<p>{' . $i . ', ' . $j . '}</p>' ;
}
}
}
}
/**
* @see http://stackoverflow.com/questions/16763322/a-formula-to-find-prime-numbers-in-a-loop
* @param int $num
* @return bool
*/
function isPrime($num) {
if ($num == 1) {
return false;
}
if ($num == 2) {
return true;
}
if ($num % 2 == 0) {
return false;
}
for ($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) {
if ($num % $i == 0) {
return false;
}
}
return true;
}
?>
<form action="" method="get">
<div>
Begingetal: <br>
<input name="begingetal" type="number">
</div>
<div>
Eindgetal: <br>
<input name="eindgetal" type="number">
</div>
<input type="submit" value="Zoeken...">
</form>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Priemtweelingen</title>
</head>
<body>
<?php
if (
isset($_GET['begingetal'], $_GET['eindgetal'])
&& is_numeric($_GET['begingetal'])
&& is_numeric($_GET['eindgetal'])
) {
for ($i = (int) $_GET['begingetal']; $i <= $_GET['eindgetal']; $i++) {
if (isPrime($i)) {
$j = $i + 2;
if (isPrime($j)) {
echo '<p>{' . $i . ', ' . $j . '}</p>' ;
}
}
}
}
/**
* @see http://stackoverflow.com/questions/16763322/a-formula-to-find-prime-numbers-in-a-loop
* @param int $num
* @return bool
*/
function isPrime($num) {
if ($num == 1) {
return false;
}
if ($num == 2) {
return true;
}
if ($num % 2 == 0) {
return false;
}
for ($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) {
if ($num % $i == 0) {
return false;
}
}
return true;
}
?>
<form action="" method="get">
<div>
Begingetal: <br>
<input name="begingetal" type="number">
</div>
<div>
Eindgetal: <br>
<input name="eindgetal" type="number">
</div>
<input type="submit" value="Zoeken...">
</form>
</body>
</html>
Lijkt me inderdaad een interessante zet.
ceil(sqrt($num))
ook. Die was ik vergeten.
Bedankt allemaal hij werkt!!!!