Ranking (as of 2015-04-04): 124 out of 427
Language: C++
/* UVa 12542 - Prime Substring To build using Visual Studio 2012 cl -EHsc -O2 UVa_12542_Prime_Substring.cpp */ #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int n_max = 100000; bool not_primes[n_max + 1]; // not_primes[i] is true if i is not a prime void sieve_of_eratosthenes() { for (int i = 2, e = static_cast<int>(sqrt(static_cast<double>(n_max))); i <= e; i++) if (!not_primes[i]) { for (int j = i * i; j <= n_max; j += i) not_primes[j] = true; } } const int nr_digits_max = 255, nr_prime_digits_max = 6; int number(const char* s, int i, int j) { int n = 0; for ( ; i < j; i++) { n *= 10; n += s[i] - '0'; } return n; } int main() { sieve_of_eratosthenes(); while (true) { char s[nr_digits_max + 1]; scanf("%s", s); int length = strlen(s); if (length == 1 && s[0] == '0') break; int max_prime = 0; for (int i = 0; i < length; i++) for (int j = i + 1; j <= i + nr_prime_digits_max && j <= length; j++) { int n = number(s, i, j); if (n <= n_max && !not_primes[n] && n > max_prime) max_prime = n; } printf("%d\n", max_prime); } return 0; }
No comments:
Post a Comment