蓝桥杯:C++素数、进制转换

素数

定义:

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

代码:

#include
using namespace std;
int main(){
	int n;
	cin >> n;
	if(n == 1){
		cout  << n << "既不是素数也不是合数" << endl;
		return 0;
	}
	for(int i = 2;i<=sqrt(n);i++){
		if(n % i ==0){
			cout  << n << "不是素数" <

上面代码要是有疑惑,也只能是这段代码可能没有做过多的解释:

i<=sqrt(n);

 解释一下:

若 2 都不能除尽,还要试 4, 6, 8, …吗?若 3 都不能除尽,还要试 9, 15, 21, …吗?

这下就很清晰了。

测试一下程序,输入2等看看结果:

再测试一下:

可以看到是正常输出的,结果也是正确的。

素数区间统计(暴力法)

也就是找某个区间内有多少个素数

代码:

#include
using namespace std;
//利用两层for循环,第一层遍历2-n的每一个数
//第二层判断这个数是不是素数
void brute_force(int n)
{
	int count = 0;//记录素数个数
	int i,j;
	int flag;//定义一个变量,若为合数,则该变量的值变为0
	for (i = 2; i <= n; i ++)
	{
		flag = 1;//先假定该数为素数
		for (j = 2; j<=sqrt(i); j ++)
		{
			if (i % j == 0)
			{
				flag = 0;//flag==0说明这个数是合数
				break;
			}
		}
		if (flag)
			count++;
	}
	printf("暴力算法 %d内有%d个素数\n", n, count);
}

int main(){
	//统计区间内的素数个数
	brute_force(5);//3个素数 
	return 0;
}

埃氏筛选

埃氏筛选的主要思想是先把n以内的合数全部找出来,合数排除以后,其余的就全部是素数了,运用的方法是以空间换时间。

void eratosthenes(int n)//埃氏筛选
{
	int no_prime[10000] = {0};//先假定全部为素数。找到一个数不是素数,就把这个值变为1     ---0是素数,1不是素数 
	int i, j;
	int count = 0;
	for (i = 2; i< n; i++)
	{
		if (!no_prime[i])//不是素数
		{
			count++;
			for (j = i * i; j < n; j += i)        
				no_prime[j] = 1;
		}
	}
	printf("埃氏筛选 %d以内有%d个素数", n, count);
}

进制转换

我们只需要学会十进制与与任意进制之间相互转换就够了,任何题型都能够套这个公式。

十进制与任意进制之间相互转换:

蓝桥杯:C++素数、进制转换_第1张图片

接下来的步骤: 从下往上数余数,为 13123,所以:

其他进制转十进制:

蓝桥杯:C++素数、进制转换_第2张图片

下面给个例题(附带讲解)

十进制转 16 进制:

蓝桥杯:C++素数、进制转换_第3张图片

你可能感兴趣的:(蓝桥杯c++,蓝桥杯,c++,算法,数据结构,c语言)