1156 Sexy Primes (20 point(s)) PAT 素数

1156 Sexy Primes (20 point(s))

素数

题目

“Forever number” is a positive integer A with K digits, satisfying the following constrains:

the sum of all the digits of A is m;
the sum of all the digits of A+1 is n; and
the greatest common divisor of m and n is a prime number which is greater than 2.
Now you are supposed to find these forever numbers.

Input Specification:
Each input file contains one test case. For each test case, the first line contains a positive integer N ( ≤ 5 ) N (≤5) N(5). Then N lines follow, each gives a pair of K ( 3 < K < 10 ) K (3<K<10) K(3<K<10) and m ( 1 < m < 90 ) m (1<m<90) m(1<m<90), of which the meanings are given in the problem description.

Output Specification:
For each pair of K and m, first print in a line Case X, where X is the case index (starts from 1). Then print n and A in the following line. The numbers must be separated by a space. If the solution is not unique, output in the ascending order of n. If still not unique, output in the ascending order of A. If there is no solution, output No Solution.

Sample Input:

2
6 45
7 80

Sample Output:

Sexy primes are pairs of primes of the form (p, p+6), so-named since “sex” is the Latin word for “six”. (Quoted from http://mathworld.wolfram.com/SexyPrimes.html)

Now given an integer, you are supposed to tell if it is a sexy prime.

Input Specification:
Each input file contains one test case. Each case gives a positive integer N ( ≤ 1 0 8 ) N (≤10^8) N(108).

Output Specification:
For each case, print in a line Yes if N is a sexy prime, then print in the next line the other sexy prime paired with N (if the answer is not unique, output the smaller number). Or if N is not a sexy prime, print No instead, then print in the next line the smallest sexy prime which is larger than N.

Sample Input 1:

47

Sample Output 1:

Yes
41

Sample Input 2:

21

Sample Output 2:

No
23

思路

题意

给出一个数字,判断其是否是SexyPrime(即该数n和(数n-6或n+6)都是素数),如果是则输出Yes和最小的另一个SexyPrime;否则输出No并找出比该数大的最小的SexyPrime。

思路

按照题意直接做即可。

解法

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

int n;

bool IsPrime(int num) {
	if (num <= 1) return false;
	for (int i = 2; i * i <= num; i++) {
		if (num % i == 0)return false;
	}
	return true;
}

int IsSexyP(int num) {
	if (IsPrime(num)) {
		if (IsPrime(num - 6))
			return num - 6;
		else if (IsPrime(num + 6))
			return num + 6;
		else
			return -1;
	}
	return -1;
}

int FindPrime(int num) {
	for (int i = num; ; i++) {
		if (IsSexyP(i) > 0)
			return i;
	}
	return 2;
}

int main() {
	scanf("%d", &n);
	int ans = IsSexyP(n);
	if (ans>0) {
		printf("Yes\n");
		printf("%d\n", ans);
	}
	else {
		printf("No\n");
		printf("%d\n", FindPrime(n));
	}
	return 0;
}

注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值