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

素数

定义:

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

代码:

#include<bits/stdc++.h>
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 << "不是素数" <<endl;
			return 0;
		}
	}
	cout  << n << "是素数" <<endl;
	return 0;
}

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

i<=sqrt(n);

 解释一下:

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

这下就很清晰了。

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

再测试一下:

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

素数区间统计(暴力法)

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

代码:

#include<bits/stdc++.h>
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);
}

进制转换

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

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

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

其他进制转十进制:

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

十进制转 16 进制:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值