コード例 #1
0
int main()
{
    auto primes = generatePrimes(10000);
    int maxN = 0;
    int maxMul = 0;
    for (int a = -999; a < 999; a++)
    {
        // b must be prime
        for (int bi = 0; primes[bi] < 999; bi++)
        {
            int n = 0;
            while (std::binary_search(primes.begin(), primes.end(),
                n * n + a * n + primes[bi])) n++;
            if (n > maxN)
            {
                maxN = n;
                maxMul = a * primes[bi];
            }
        }
    }
    std::cout << maxMul << '\n';
}
コード例 #2
0
ファイル: primecoin.cpp プロジェクト: cqtenq/xpmminer
PrimeSource::PrimeSource(uint32_t primesNum, unsigned inversedMultipliersNum) :
  _primesNum(primesNum)
{
  // Use Eratosthenes sieve for search first N primes
  _primes = new uint32_t[primesNum];

  _primesCombined = new uint32_t[inversedMultipliersNum];
  _isNewMultiplier = new uint32_t[inversedMultipliersNum];
  _multipliers = new uint32_t[inversedMultipliersNum];
  _offsets = new uint32_t[inversedMultipliersNum];
  _multipliers64 = new uint64_t[inversedMultipliersNum];
  _offsets64 = new uint32_t[inversedMultipliersNum];
  _combinedMultipliers = new uint64_t[inversedMultipliersNum];
  _combinedOffsets = new uint32_t[inversedMultipliersNum];
   
  generatePrimes(_primes, primesNum);
  generateMultipliers(_primesCombined, _isNewMultiplier,
                      _multipliers, _offsets,
                      _multipliers64, _offsets64,
                      _combinedMultipliers, _combinedOffsets,
                      _primes, primesNum, inversedMultipliersNum);
}
コード例 #3
0
ファイル: primegenplugin.cpp プロジェクト: kecho/WarmLib
    virtual int PluginMain(int inputBufferSize, const char * inputBuffer, int outputBufferSize, char * outputBuffer)
    {
        const ComputePrimesJob * job = reinterpret_cast<const ComputePrimesJob*>(inputBuffer);
        ComputedPrimesResponse * response = reinterpret_cast<ComputedPrimesResponse*>(outputBuffer);

        response->count = 0;

        int inputSize = job->endNumber - job->initialNumber + 1;
        if (inputSize <= 0)
        {
            return 0;
        }

        int initialNumber = job->initialNumber > 0 ? job->initialNumber : 1;
        int endNumber = inputSize > MAX_PRIME_NUMBERS ? job->initialNumber + MAX_PRIME_NUMBERS - 1 : job->endNumber;

        int size = endNumber - initialNumber + 1;

        int numberOfBytes = (endNumber + 1) / 8 + (endNumber % 8 ? 1 : 0);
        char * buffer = new char[numberOfBytes];
        generatePrimes(buffer, numberOfBytes, endNumber);

        for (int i = 0, n = 0; i < size; ++i)
        {
            int index = i + initialNumber - 1;
            if (IsSet(index, buffer))
            {
                response->primeList[n++] = index + 1;
                ++response->count;
            }
        }
        delete [] buffer;

#if SIMULATE_DELAY
        sleep(6);
#endif
        return 0;
    }
コード例 #4
0
ファイル: hw7.c プロジェクト: ashtonmendes/Generating-Primes
int main(int argc, char* argv[])
{
	//skip argv[0]
	argc--;
	argv++;

	if(argc <= 0) //No arguments provided
	{
		fprintf(stderr, "Please enter command line arguments.\n");
		printUsage();
		return EXIT_FAILURE;
	}

	//primes
	if(strcmp(*argv, "primes") == 0)
	{
		if(argc-1 < 1 || argc-1 > 1)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		char* maxvalString = malloc(100*sizeof(char));
		unsigned int maxval = 0;

		for(argc--; argc>0; argc--)
		{
			argv++;

			if(strlen(*argv) < 4)
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}

			//maxval
			if(argv[0][0]=='-' && argv[0][1]=='n' && argv[0][2]=='=')
			{
				//Get tablefile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					maxvalString[i-3] = argv[0][i];
				}
				maxvalString[i-3] = '\0';
			}

			else
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}
		}

		maxval = strtod(maxvalString, NULL);
		//check for errors
		if(maxval < 2 || maxval > 16777216) //maxval must be between 2 and 2^24, inclusive
		{
			fprintf(stderr, "maxval must be between 2 and 2^24, inclusive.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		generatePrimes(maxval);

		free(maxvalString);
	}

	//trialdiv
	else if(strcmp(*argv, "trialdiv") == 0)
	{
		//Get hold of arguments
		char* number = malloc(100*sizeof(char));
		char* primesfileName = malloc(100*sizeof(char));

		//No, less or extra parameters for keyexpand
		if(argc-1 < 2 || argc-1 > 2)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		for(argc--; argc>0; argc--)
		{
			argv++;

			if(strlen(*argv) < 4)
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}

			//key
			if(argv[0][0]=='-' && argv[0][1]=='n' && argv[0][2]=='=')
			{
				//Get key from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					number[i-3] = argv[0][i];
				}
				number[i-3] = '\0';
			}

			//tablefile
			else if(argv[0][0]=='-' && argv[0][1]=='p' && argv[0][2]=='=')
			{
				//Get tablefile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					primesfileName[i-3] = argv[0][i];
				}
				primesfileName[i-3] = '\0';
			}

			else
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}
		}

		if(strlen(number) == 0 || strlen(primesfileName) == 0)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		performTrialDivision((unsigned char*)number, primesfileName);

		free(number);
		free(primesfileName);
	}

	//millerrabin
	else if(strcmp(*argv, "millerrabin") == 0)
	{
		//Get hold of arguments
		char* number = malloc(100*sizeof(char));
		char* maxIter = malloc(100*sizeof(char));
		char* primesfileName = malloc(100*sizeof(char));

		//No, less or extra parameters for millerrabin
		if(argc-1 < 3 || argc-1 > 3)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		for(argc--; argc>0; argc--)
		{
			argv++;

			if(strlen(*argv) < 4)
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}

			//number
			if(argv[0][0]=='-' && argv[0][1]=='n' && argv[0][2]=='=')
			{
				//Get number from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					number[i-3] = argv[0][i];
				}
				number[i-3] = '\0';
			}

			//primesfile
			else if(argv[0][0]=='-' && argv[0][1]=='p' && argv[0][2]=='=')
			{
				//Get primesfile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					primesfileName[i-3] = argv[0][i];
				}
				primesfileName[i-3] = '\0';
			}

			//maxiter
			else if(argv[0][0]=='-' && argv[0][1]=='t' && argv[0][2]=='=')
			{
				//Get number from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					maxIter[i-3] = argv[0][i];
				}
				maxIter[i-3] = '\0';
			}

			else
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}
		}

		if(strlen(number) == 0 || strlen(primesfileName) == 0 || strlen(maxIter) == 0)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		runMillerRabin((unsigned char*)number, maxIter, primesfileName);

		free(number);
		free(primesfileName);
		free(maxIter);
	}

	//rndsearch
	else if(strcmp(*argv, "rndsearch") == 0)
	{
		//Get hold of arguments
		char* numbitsString = malloc(100*sizeof(char));
		int numbits = 0;
		char* maxIter = malloc(100*sizeof(char));
		int maxitr = 0;
		char* primesfileName = malloc(100*sizeof(char));
		char* rndfileName = malloc(100*sizeof(char));

		//No, less or extra parameters for millerrabin
		if(argc-1 < 4 || argc-1 > 4)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		for(argc--; argc>0; argc--)
		{
			argv++;

			if(strlen(*argv) < 4)
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}

			//numbits
			if(argv[0][0]=='-' && argv[0][1]=='k' && argv[0][2]=='=')
			{
				//Get numbits from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					numbitsString[i-3] = argv[0][i];
				}
				numbitsString[i-3] = '\0';
			}

			//maxIter
			else if(argv[0][0]=='-' && argv[0][1]=='t' && argv[0][2]=='=')
			{
				//Get maxIter from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					maxIter[i-3] = argv[0][i];
				}
				maxIter[i-3] = '\0';
			}

			//primesfile
			else if(argv[0][0]=='-' && argv[0][1]=='p' && argv[0][2]=='=')
			{
				//Get primesfile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					primesfileName[i-3] = argv[0][i];
				}
				primesfileName[i-3] = '\0';
			}

			//rndfile
			else if(argv[0][0]=='-' && argv[0][1]=='r' && argv[0][2]=='=')
			{
				//Get rndfile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					rndfileName[i-3] = argv[0][i];
				}
				rndfileName[i-3] = '\0';
			}

			else
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}
		}

		if(strlen(numbitsString) == 0 || strlen(primesfileName) == 0 || strlen(maxIter) == 0 || strlen(rndfileName)==0)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		numbits = strtod(numbitsString, NULL);
		maxitr = strtod(maxIter, NULL);

		performRndSearch(numbits, maxitr, primesfileName, rndfileName);

		free(numbitsString);
		free(primesfileName);
		free(maxIter);
		free(rndfileName);
	}

	//maurer
	else if(strcmp(*argv, "maurer") == 0)
	{
		//Get hold of arguments
		char* numbitsString = malloc(100*sizeof(char));
		int numbits = 0;
		char* primesfileName = malloc(100*sizeof(char));
		char* rndfileName = malloc(100*sizeof(char));

		//No, less or extra parameters for millerrabin
		if(argc-1 < 3 || argc-1 > 3)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		for(argc--; argc>0; argc--)
		{
			argv++;

			if(strlen(*argv) < 4)
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}

			//numbits
			if(argv[0][0]=='-' && argv[0][1]=='k' && argv[0][2]=='=')
			{
				//Get numbits from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					numbitsString[i-3] = argv[0][i];
				}
				numbitsString[i-3] = '\0';
			}

			//primesfile
			else if(argv[0][0]=='-' && argv[0][1]=='p' && argv[0][2]=='=')
			{
				//Get primesfile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					primesfileName[i-3] = argv[0][i];
				}
				primesfileName[i-3] = '\0';
			}

			//rndfile
			else if(argv[0][0]=='-' && argv[0][1]=='r' && argv[0][2]=='=')
			{
				//Get rndfile from argv
				int i=0;
				for(i=3; i<strlen(*argv); i++)
				{
					rndfileName[i-3] = argv[0][i];
				}
				rndfileName[i-3] = '\0';
			}

			else
			{
				fprintf(stderr, "Malformed command.\n");
				printUsage();
				return EXIT_FAILURE;
			}
		}

		if(strlen(numbitsString) == 0 || strlen(primesfileName) == 0 || strlen(rndfileName)==0)
		{
			fprintf(stderr, "Malformed command.\n");
			printUsage();
			return EXIT_FAILURE;
		}

		numbits = strtod(numbitsString, NULL);

		performMaurer(numbits, primesfileName, rndfileName);

		free(numbitsString);
		free(primesfileName);
		free(rndfileName);
	}

	else
	{
		fprintf(stderr, "Malformed command.\n");
		printUsage();
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}
コード例 #5
0
ファイル: prime_pthread.c プロジェクト: holmesmo/CourseWork
int main(int argc, char **argv){

	//help from: http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
	//and http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt
	
	int c;
	unsigned int mvalue = UINT_MAX;
	unsigned long int cvalue = 1;
	int qflag = 0;
	int pflag = 0;
	unsigned long int numOfBitsInBitArray;

	while((c = getopt(argc, argv, "qm:c:p")) != -1)
		switch(c){
		case 'm':
			mvalue = atoi(optarg);
			break;
		case 'c':
			cvalue = atoi(optarg);
			break;
		case 'q':
        		qflag = 1;
            		break;
        	case 'p':
        		pflag = 1;
        		break;
		case '?':
			usageError();
		}

	if((qflag == 1) && (pflag == 0) && (mvalue > 2)){
		generatePrimes(mvalue, cvalue, &numOfBitsInBitArray);
		computeTwinPrimes(&numOfBitsInBitArray);
		free(bitArray);
	}
	else if((qflag == 1) && (mvalue > 2)){
		generatePrimes(mvalue, cvalue, &numOfBitsInBitArray);
		free(bitArray);
	}
	else if ((qflag == 0) && (pflag == 0) && (mvalue > 2)){
		generatePrimes(mvalue, cvalue, &numOfBitsInBitArray);
		printTwinPrimes(&numOfBitsInBitArray);
		free(bitArray);
	}
	else if((qflag == 0) && (mvalue > 2)){
		generatePrimes(mvalue, cvalue, &numOfBitsInBitArray);
		printPrimes(&numOfBitsInBitArray);
		free(bitArray);
	}
	else if ((qflag == 0) && (mvalue == 2)){  
		printf("Primes:\n"
				"2\n"
				"There are no twin primes.\n");
	}
	else if((qflag == 1) && (mvalue == 2)){
		//do nothing
	}
	else{ //mvalue is less than 2
		printf("There are no primes.\n");
	}
	
	return 0;
}