Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
TruncatablePrime
#include <stdio.h> #include <stdlib.h> #include <math.h> long BuscarLPrimoN(long); short EsLPrimo(long); long SiguientePrimo(long); long SiguienteCandidato(long); int main() { long N = 1000; // Número ordinal que indica el primo a buscar. long primoN; // Valor buscado. primoN = BuscarLPrimoN(N); printf("Primo N-esimo: %ld\n\n", primoN); return 0; } long BuscarLPrimoN(long N) { if(N == 1) return 2; if(N == 2) return 3; if(N == 3) return 5; if(N == 4) return 7; long candidato = 10; N -= 4; do { if(EsLPrimo(candidato + 3)) { N--; /*printf("\t%ld\n", candidato + 3);*/ if(!N) return candidato + 3; } if(EsLPrimo(candidato + 7)) { N--; /*printf("\t%ld\n", candidato + 7);*/ if(!N) return candidato + 7; } candidato = SiguienteCandidato(candidato); }while(1); return candidato; } short EsLPrimo(long N) { long rango = 10; long v; do { long raiz = sqrt(v = N % rango); long d; for(d = 2 ; d <= raiz && v % d ; d = SiguientePrimo(d)); if(v % d == 0) return 0; rango *= 10; }while(v != N); return 1; } long SiguientePrimo(long p) { long d; for(p = p + 1 ; ; p++) { for(d = 2 ; d <= sqrt(p) && p % d ; d++); if(p % d) return p; } } long SiguienteCandidato(long N) { N += 10; if(N >= 100 && (N / 10) % 10 == 0) N += 10; if(N >= 1000 && (N / 100) % 10 == 0) N += 100; if(N >= 10000 && (N / 1000) % 10 == 0) N += 1000; if(N >= 100000 && (N / 10000) % 10 == 0) N += 10000; if(N >= 1000000 && (N / 100000) % 10 == 0) N += 100000; if(N >= 10000000 && (N / 1000000) % 10 == 0) N += 1000000; if(N >= 100000000 && (N / 10000000) % 10 == 0) N += 10000000; if(N >= 1000000000 && (N / 100000000) % 10 == 0) N += 100000000; return N; }
run
|
edit
|
history
|
help
0
Done I think
tyiy
Add.c
Project 4 v.3
-Wconversion double -> int
Tree
MATRIZ DE CADENAS
json formatter
Max of arrays
18BCE2182 ASSESS_1 Q1-8