/*
3, 5, 15, 17, 51, 85, 255, 257, 771, 1285, 3855, 4369, 13107, 21845
*/
void divisorOf(uint32_t n) {
if (!n)
return; // ritorna subito se n == 0
uint32_t i = 2;
uint32_t end = sqrt(n);
uint32_t nDivFound = 0;
Serial.println(1);
while (i <= end) {
if (!(n % i)) {
nDivFound++;
Serial.println(i);
}
i++;
}
if (nDivFound > 0) {
Serial.print(n);
Serial.print(" ha ");
Serial.print(nDivFound + 1);
Serial.println(" Divisori");
} else
if (nDivFound == 0 && n != 1) {
Serial.print(n);
Serial.println(" è numero primo");
}
//Serial.println(i);
}
bool isPrime(uint32_t n) {
if (n == 1) return false;
// Verifica divisibilità nel 2÷sqrt(n)
uint32_t end = sqrt(n);
for (int i = 2; i <= end; i++) {
// Se n è divisibile per i, non è un numero primo
if (n % i == 0) {
return false;
}
}
// Se non è stato trovato alcun divisore, n è numero primo
return true;
}
void allPrimeOf(uint32_t min, uint32_t max) {
/*if (min <= 3) min = 3;
else if (!(min % 2))
min += 1;*/
if ((min & 1) == 0)
min += 1;
for (uint64_t i = min; i <= max; i += 2) {
if (isPrime(i))
Serial.println((uint32_t)i);
}
}
void old_divisorOf(uint32_t n) {
if (!n)
return; // ritorna subito se n == 0
uint32_t i = 2;
uint32_t end = n;
bool first = false;
Serial.println(1);
while (i < end) {
if (!(n % i)) {
/*if (first == false) {
end = n / i;
first = true;
}*/
Serial.println(i);
}
i++;
}
}
void setup() {
Serial.begin(115200);
//printDeviceAddr(daddr);
//divisorOf(65535);
allPrimeOf(65535, 4294967295);
//old_divisorOf(12);
/*for (uint32_t n = 3; n < 65535; n+=2) {
if (isPrime(n))
Serial.println(n);
}*/
int8_t a = -16;
int16_t b = 3;
int16_t r = a % b;
//uint8_t r0 = (((a) mod (b)) + (b)) % (b);
Serial.print(a);
Serial.print(" % ");
Serial.print(b);
Serial.print(" = ");
Serial.println(r);
return;
delay(1000);
}
void loop() {
}