|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2008
Messaggi: 7
|
[VB] algoritmo
in un problema devo dire se un numero è primo.
il mio problema è quello che non so quale deve essere il blocco di controllo per indicare se un numero è primo. avete capito? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
Quando un numero si dice primo ?
Quando è divisibile per se stesso e per 1. Quindi se devi vedere se 5 è primo (e lo è 4 non è primo perchè : divisibile pr 3(no) 2(si) !!! allora non è primo ragiona su questo !!! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
io l'ho fatto l'anno scorso un programmino del genere.. Devi prendere il numero e provarlo a dividere per tutti i numeri e vedere se la divisione è possibile o da un resto. Se è possibile allora il numero è primo se da un resto aloora vai avanti fino a quando non arrivi ad uno. A quel punto puoi dire che il numero è primo.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
Quote:
per il resto è tutto esatto |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Numeri grandi probabilmente saranno multipli di numeri più piccoli, quindi io direi di far iniziare il controllo dal due (tutti i numeri interi positivi sono divisibili per uno, quindi non ha senso fare quel controllo) e fermarsi ad n/2, dove n è il numero di cui si vuole verificare la primalità (esercizio: perché proprio ad n/2?
Altrimenti un metodo molto simpatico è prepararsi un vettore con una certa quantità di numeri interi, eliminare i numeri non primi (Google: "Crivello di Eratostene"), e poi confrontare quell'array per verificare la primalità (una volta riempito l'array, la consultazione dello stesso richiederà un tempo costante, dando una risposta immediata e senza branch di alcun tipo). Ci saranno probabilmente anche altri metodi più efficienti ed intelligenti, ma a quest'ora non mi viene proprio nient'altro per la testa. ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 11-12-2008 alle 00:40. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
Public Function testSePrimo(num As Long) As Boolean
Dim div As Long
div = 1
Do While div <= (num / 2)
div = div + 1
If num Mod div = 0 Then
testSePrimo = False
Exit Function
End If
Loop
testSePrimo = True
End Function
|
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Nov 2007
Messaggi: 122
|
Prova ad implementare il test di Fermat
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
da WIKIPEDIA.IT
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main();
bool Prime(unsigned int * n);
int main () {
unsigned int l;
printf("\n GENERATORE DI NUMERI PRIMI CONSECUTIVI\n\n");
printf("Inserisci numero limite (maggiore di 1): ");
do {
scanf("%d", &l);
} while (l < 2); // Chiede un numero finché non viene inserito un valore maggiore di 1
printf("\n-\n\nI numeri primi da 0 a %d sono:\n\n2", l);
for(unsigned int a = 3; a <= l; a += 2) { // Genera i numeri da controllare unicamente dispari
if(Prime(&a)) printf("\n%d", a); // Se è primo viene stampato
}
printf("\n\n-\n\n");
system("PAUSE");
return 0;
}
bool Prime(unsigned int * n) {
for(unsigned int b = 2; b <= (unsigned int)(trunc(sqrt(*n))); b++)
if((*n) % b == 0) {
return false;
}
return true;
}
/*Version più veloce :D*/
#include <iostream>
#include <cmath>
using namespace std;
void numeri_primi(int max)
{
int k=max/(int)log(max);
int i,j,pasI=2;int *dp=new int[k];int *m=new int[k];int massimo=1,prova;
dp[0]=5;
m[0]=25;
float temp=clock()/((float)CLOCKS_PER_SEC);
cout<<2<<endl<<3<<endl<<5<<endl;
for(i=7; i<max ;i+=(pasI=6-pasI)) //
{
for(prova=dp[j=0]; (i%m[j])&& prova*prova<i; prova=dp[++j])
{
if(i>m[j]) m[j]+=2*prova;
}
if(i!=m[j])
{
cout<<i<<endl;
dp[massimo]=i;
m[massimo++]=i*i;
}
}
cout<<endl<<"Tempo di esecuzione : "<<clock()/((float)CLOCKS_PER_SEC)-temp<<" secondi";
delete dp;
delete m;
}
main()
{
int i;
cout<<"Introdurre il numero Max : "<<endl;
cin>>i;
numeri_primi(i);
}
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
N, numero reale, è prodotto di A e B. A e B numeri reali. Per ogni A > sqrt(N), B = N/A, allora B < sqrt(N).
Riportando agli interi la questione non cambia, sia N intero, si ha quindi che sia A divisore intero di N, A > sqrt(N), B = N/A, allora B < sqrt(N). Se ne deduce che per trovare A e B divisori di N basta cercare B fra i numeri interi <= di sqrt(N) visto che l'altro numero A (A * B = N) è sicuramente >= di sqrt(N). |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
Quote:
TUTTA QUESTA MATEMATICA gRAZIE mILLE |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:18.




















