👤

Să se scrie un program C care afișează numerele naturale prime de patru cifre cu proprietatea că au suma cifrelor sau produsul cifrelor lor egal cu o valoare v citită de la tastatură.

Răspuns :

Varinata 1) mai putin eficienta (mai lenta)

#include <stdio.h>

int main() {
    int v;
    scanf("%d", &v);
    for(int i = 1000; i <= 9999; i++){
      int ci = i, s = 0, p = 1;
      int d = 2;
      while(d <= ci && ci % d != 0)
        d++;
      if(ci == d) // este prim
      {
       while(ci > 0) {
           s = s + ci % 10;
           p = p * (ci % 10);
           ci = ci / 10;
       } 
       if(s == v || p == v)
         printf("%d ", i);
      }
       
    }
    return 0;
}


Varianta 2:


#include <stdio.h>
 
int main() {
    int v;
    scanf("%d", &v);
    for(int i = 1009; i <= 9973; i++){
      int ci = i, s = 0, p = 1;
      int d = 2;
      while(d * d <= ci && ci % d != 0)
        d++;
      if(d * d > ci) // este prim
      {
       while(ci > 0) {
           s = s + ci % 10;
           p = p * (ci % 10);
           ci = ci / 10;
       } 
       if(s == v || p == v)
         printf("%d ", i);
      }
       
    }
    return 0;
}