/*
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() { 
    
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
74HC595
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
gnd1:GND
74HC595
sr2:Q1
sr2:Q2
sr2:Q3
sr2:Q4
sr2:Q5
sr2:Q6
sr2:Q7
sr2:GND
sr2:Q7S
sr2:MR
sr2:SHCP
sr2:STCP
sr2:OE
sr2:DS
sr2:Q0
sr2:VCC
led9:A
led9:C
led10:A
led10:C
led11:A
led11:C
led12:A
led12:C
led13:A
led13:C
led14:A
led14:C
led15:A
led15:C
led16:A
led16:C