洛谷 B3939 [GESP样题 四级] 绝对素数: 思路 和 C++ 题解

洛谷 B3939 [GESP样题 四级] 绝对素数: 思路 和 C++ 题解

x x x 篇 CSDN!( x ≥ 7 x \ge 7 x7

B3939 [GESP样题 四级] 绝对素数

假设有这么一个方法 i s A b s o l u t e P r i m e ( i n t   n ) isAbsolutePrime(int\ n) isAbsolutePrime(int n) 可以判断 n n n 是不是绝对素数…

那么,从 a a a b b b 枚举,每次调 i s A b s o l u t e P r i m e ( ) isAbsolutePrime() isAbsolutePrime(),如果返回 t r u e true true,就输出。

可是 i s A b s o l u t e P r i m e isAbsolutePrime isAbsolutePrime 该怎么写?

首先,如果 n ≤ 1 n \le 1 n1,肯定不是绝对素数,返回 f a l s e false false.
那么从 2 2 2 n \sqrt{n} n 进行枚举,如果有一个数字 i i i 满足 n   m o d   i = 0 n\ mod\ i=0 n mod i=0,那么 n n n 为合数,返回 f a l s e false false.

接着,将 n n n 翻转,这里可以用点字符串…
假设 s s s n n n 的字符串形式,那么将 s s s 翻转并转为数字就是 n n n 翻转过后的结果。

字符串的翻转可以用 a l g o r i t h m . h algorithm.h algorithm.h 头文件中的 r e v e r s e ( _ B i t e r , _ B i t e r ) reverse(\_Biter, \_Biter) reverse(_Biter,_Biter) 方法,其中 _ B i t e r \_Biter _Biter 是一个指针,第一个表示从哪开始反转。第二个表示从哪结束反转,正好, s t i r n g stirng stirng 类型有两个指针 s t r i n g . b e g i n ( ) string.begin() string.begin() s t r i n g . e n d ( ) string.end() string.end() 表示字符串的开头指针与结束指针。

将他反转过后再把他转成整数就可以了。

接着,我们把上面判断素数的代码 C t r l + C , C t r l + V Ctrl+C, Ctrl+V Ctrl+C,Ctrl+V 一下。

最后,如果前面没有返回 f a l s e false false,那么返回 t r u e true true,表示 n n n 是一个绝对素数。

所以,上代码!

#include <bits/stdc++.h>
using namespace std;

int a, b;
int absolutePrime(int n) {
	if (n <= 1)
		return false;
	
	for (int i = 2;i * i <= n;i ++)
		if (n % i == 0)
			return false;
	
	string alter = to_string(n);
	reverse(alter.begin(), alter.end());
	n = stoi(alter);
	
	for (int i = 2;i * i <= n;i ++)
		if (n % i == 0)
			return false;
	
	return true;
}

int main() {
	cin >> a >> b;
	
	for (int i = a;i <= b;i ++)
		if (absolutePrime(i))
			cout << i << endl;
}

总结:
判断素数时从 2 2 2 n \sqrt{n} n 枚举

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值