东方博宜oj-1405 - 小丽找潜在的素数

题干如下:

      小丽同学在编程中学到了二进制数的概念,她发现,有些二进制数,如果转为 1010 进制,就是素数,小丽把这些数称为潜在的素数;比如 22 进制 11010111101011,转为 1010 进制后为 107107 ,就是素数。

      请编程帮小丽找出,哪些二进制数转为 1010 进制后,是素数,计算出这样的数有多少个?

输入

第一行是一个整数 nn(10≤n≤10010≤n≤100)。

接下来 nn 行,每行是一个 3030 位以内的 22 进制数

输出

一个整数代表所有转为 1010 进制后是素数的 22 进制数的个数。


样例

输入
6
1010000
1011
1101001
10111
111
1101011
输出
4

源代码-示例如下:

       这个题目其实很不错,很适合考查基础,综合考查了几个点,你如经典的判断素数,进制转换,也有字符串,控制结构。

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

// 判断一个数是否为素数的函数
bool isPrime(int num) {
	if (num < 2)
		return false;  // 小于2的数不是素数,直接返回false
	for (int i = 2; i <= sqrt(num); i++) {  // 从2开始到该数的平方根遍历
		if (num % i == 0)
			return false;  // 如果能被整除,就不是素数,返回false
	}
	return true;  // 遍历完都没被整除,是素数,返回true
}

// 计算2的i次方的函数,用于模拟位权
int powerOfTwo(int i) {
	int result = 1;
	for (int j = 0; j < i; j++) {
		result *= 2;
	}
	return result;
}

// 二进制转十进制的函数
int binToDec(string bin) {
	int decimal = 0;
	int len = bin.length();
	for (int i = 0; i < len; i++) {
		// 使用powerOfTwo函数计算当前位的位权,替代了之前的(1 << i)操作
		decimal += (bin[len - i - 1] - '0') * powerOfTwo(i);
	}
	return decimal;
}

int main() {
	int n;
	cin >> n;
	int count = 0;  // 用于记录转为十进制后是素数的二进制数的个数
	for (int i = 0; i < n; i++) {
		string bin;
		cin >> bin;
		int decimalNum = binToDec(bin);  // 先将二进制数转换为十进制数
		if (isPrime(decimalNum)) {  // 判断转换后的十进制数是否为素数
			count++;  // 如果是素数,个数加1
		}
	}
	cout << count << endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值