uint64_t PrimeSieve::nthPrime(int64_t n, uint64_t start)
{
  setStart(start);
  double t1 = getWallTime();

  if (n == 0)
    n = 1; // Like Mathematica
  else if (n > 0)
    start = add_overflow_safe(start, 1);
  else if (n < 0)
    start = sub_underflow_safe(start, 1);

  uint64_t stop = start;
  uint64_t dist = nthPrimeDist(n, 0, start);
  uint64_t nthPrimeGuess = add_overflow_safe(start, dist);

  int64_t count = 0;
  int64_t tinyN = 10000;
  tinyN = max(tinyN, pix(isqrt(nthPrimeGuess)));

  while ((n - count) > tinyN ||
         sieveBackwards(n, count, stop))
  {
    if (count < n)
    {
      checkLimit(start);
      dist = nthPrimeDist(n, count, start);
      stop = add_overflow_safe(start, dist);
      count += countPrimes(start, stop);
      start = add_overflow_safe(stop, 1);
    }
    if (sieveBackwards(n, count, stop))
    {
      checkLowerLimit(stop);
      dist = nthPrimeDist(n, count, stop);
      start = sub_underflow_safe(start, dist);
      count -= countPrimes(start, stop);
      stop = sub_underflow_safe(start, 1);
    }
  }

  if (n < 0)
    count -= 1;

  checkLimit(start);
  uint64_t overValue = 3;
  dist = nthPrimeDist(n, count, start) * overValue;
  stop = add_overflow_safe(start, dist);
  NthPrime np;
  np.findNthPrime(n - count, start, stop);
  seconds_ = getWallTime() - t1;

  return np.getNthPrime();
}
Exemple #2
0
countPrimes(int a, int b)
{
	if(a>b)
		return 0;
	if(isprime(b))
	{
		printf("%d  ",b);
		return 1 + countPrimes(a,b-1);
	}
	else
		return countPrimes(a,b-1);
}
Exemple #3
0
int main(int argc, char const *argv[])
{

int i;

int N = atoi(argv[1]);

int nodesAlloc = ((N-2)/16384) + 2;

head= (  seg * ) malloc(sizeof(seg));
	pt=head;
	for (i=1;i<nodesAlloc;i++) { 
		pt->next = (  seg *) malloc(sizeof (seg)); //allocate forward nodes
		pt->prev = pt; 				   //allocate backward nodes
		pt=pt->next;
		}

	printf("Allocated %d nodes\n",i);
	
sieveOfE(N);
primecount = countPrimes(N)-1;
printf("Amount of primes = %d \n", primecount);

while(numbers != EOF){
printf("Enter your numbers or EOF:");
// if an odd integer is entered or eof is detected exit
if ( scanf("%d", &numbers) == EOF || numbers % 2 != 0 )
     {
        break;
     }
else{goldbach(numbers);}
}

   return 0;
}
Exemple #4
0
int main(void)
{
	int max_number;
	float ticks;
	char * PrimeNumbers;

	printf("\nMaximum number: ");
	scanf("%u",&max_number);

	PrimeNumbers = (char *) calloc(max_number % 16 == 0 ? max_number / 16 : 1 + max_number / 16, 1);
	if (!PrimeNumbers)
	{
		fprintf(stderr, "Unable to allocate memory\n");
		return -1;
	}

	ticks = clock();

	findPrimes(PrimeNumbers, max_number);
	//printf("2\n");printPrimes(PrimeNumbers, max_number);

	printf("Found %u primes between 2 and %u in %g seconds\n",countPrimes(PrimeNumbers, max_number),max_number,(clock() - ticks)/CLOCKS_PER_SEC);

	free(PrimeNumbers);

	return 0;
}
Exemple #5
0
main()
{
	int a,b;
	printf("Enter values of a and b :");
	scanf("%d %d",&a,&b);
	printf("\nTotal prime numbers = %d\n",countPrimes(a,b));
}
Exemple #6
0
int main(void) {
	long long n;
	readInputData(&n);

	writeOutputData(countPrimes(n), n);

	return 0;
}
Exemple #7
0
int main()
{
	double start = GetTickCount();
	countPrimes(150000);
	double end = GetTickCount();
    printf("\ncost=%lfms\n", end - start);

    return 0;
}
Exemple #8
0
int main(int argc, char const *argv[])
{
	int N;

	N = 100;

	printf("%d\n", countPrimes(N));
	return 0;
}
Exemple #9
0
int main(int argc, char *argv[])
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s n\n", argv[0]);
    return 1;
  }

  printf("%d\n", countPrimes(atoi(argv[1])) );
  return 0;
}
Exemple #10
0
int main()
{
	int n=0;
	while(1)
	{
		scanf("%i",&n);
		printf("%i\n", countPrimes(n));
	}
	return 1;
}
Exemple #11
0
//个人测试用例
int main(void)
{
    int num;
    scanf("%d", &num);

    int cnt = countPrimes(num);
    printf("\n%d\n", cnt);

    return 0;
}
void readLinesFromFile(const char* filePath) {
  assert(filePath);
  std::string lineBuffer;
  std::ifstream file;
  file.open(filePath);
  std::vector<std::vector<int> > primeRanges;
  while (std::getline(file, lineBuffer)) {
    if (lineBuffer.empty()) { continue; } 
    std::vector<int> range = intenizeString(lineBuffer, ",");
    primeRanges.push_back(range);
  }
  countPrimes(primeRanges);
}
Exemple #13
0
int main() {
    int e, d, c = 0;
    for(int a = -999; a <= 999; ++a) {
        for(int b = -999; b <= 999; ++b) {
            int k = countPrimes(a,b);
            if(k > c) {
                c = k;
                e = a;
                d = b;
            }
        }
    }
    std::cout << e*d;
}
Exemple #14
0
void sieve(int n) {
    int i, p = 2, pmax = (int)sqrt(n);
    char set[n];
    unsigned long count = sizeof(set) / sizeof(set[0]);
    
    for (i = 0; i < count; i++) { set[i] = 1; }
    set[0] = set[1] = 0;
    
    while (p <= pmax) {
        for (i = p * p; i < count; i += p) { set[i] = 0; }
        do { p++; } while (!set[p]); // continue search for primes
    };
    
    countPrimes(set, count);
}
int main() {
    int n;
    scanf("%d", &n);
    printf("%d ", countPrimes(n));
    return 0;
}
Exemple #16
0
int main() {

    /* 348513 */
    printf("%d\n", countPrimes(5000000));
    return 0;
}
Exemple #17
0
int main()
{
	printf_s("The result is: %d\n", countPrimes(121));
	return 0;
}
Exemple #18
0
int main()
{
    int ret = countPrimes(1500000);
    printf("%d\n", ret);
}
Exemple #19
0
int main()
{
    int count = countPrimes(1500000);
    printf("%d\n", count);
    return 0;
}