素數求解

// 求某個正整數是否爲素數
void is_Prime()
{
	int s;
	while (scanf_s("%d", &s) != EOF)
	{
		if (s < 2)
		{
			printf("NO\n");
		}
		else {
			int r = -1;
			// 這裏先計算平方根,然後+1避免精度損失,同時for循環僅計算一次平方根
			// 同時保證2輸出是質數
			int bound = (int)sqrt(s) + 1;
			for (int i = 2; i < bound; i++) 
			{
				r = s % i;
				if (r == 0)
					break;
			}
			if (r == 0)
				printf("%s\n", "NO");
			else
				printf("%s\n", "YES");
		}
	}
}
// 素數篩選法求出某個區間內[1, n]的所有素數
void init(int*prime, int*primeSize, bool*mark)
{
	/*
	先把對應的區間所有的位置都標記爲素數,然後依次遍歷;
	如果當前的數是素數,那麼在這一區間的所有該素數的整數倍都要標記
	爲非素數。不過這裏從i的平方開始,因爲小於i的該素數倍數的都被之前的標記過
	所以不再重複標記
	*/
	for (int i = 1; i <= 10000; i++)
		mark[i] = false;
	*primeSize = 0;
	for (int i = 2; i <= 10000; i++)
	{
		if (mark[i] == true)
			continue;
		prime[(*primeSize)++] = i;
		for (int j = i*i; j <= 10000; j += i)
		{
			mark[j] = true;
		}
	}
}
void get_Primes()
{
	int prime[10000];
	int primeSize;
	bool mark[10001];
	init(prime, &primeSize, mark);
	int n;
	while (scanf_s("%d", &n) != EOF)
	{
		bool isOput = false;
		for (int i = 0; i < primeSize; i++)
		{
			if (prime[i] < n && prime[i] % 10 == 1)
			{
				if (isOput == false)
				{
					isOput = true;
					printf("%d", prime[i]);
				}
				else
					printf(" %d", prime[i]);
			}
		}
		if (isOput == false)
			printf("-1\n");
		else
			printf("\n");
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章