首页 > 编程语言 > 详细

PAT A1015 C++/Go语言题解及注意事项

时间:2020-10-05 22:11:15      阅读:33      评论:0      收藏:0      [点我收藏+]

1015 Reversible Primes (20分)

A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.

Now given any two positive integers N (<) and D (1), you are supposed to tell if N is a reversible prime with radix D.

Input Specification:

The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.

Output Specification:

For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.

Sample Input:

73 10
23 2
23 10
-2

Sample Output:

Yes
Yes
No

思路:

首先判断N,若N不是素数直接输出No,否则将其转换为D进制,然后逆序,再将逆序后的D进制数转换为十进制数q,判断q是否为素数即可。

C++ Solution:

#include <bits/stdc++.h>

using namespace std;

bool isPrime(int n) {//判断素数
    if (n <= 1) return false;
    for (int i = 2; i <= sqrt(n); ++i) {  // i*i<=n也可
        if (n % i == 0) return false;
    }
    return true;
}

vector<int> changeD(int num, int d) {//将N转换为D进制数
    vector<int> result;
    do {
        result.push_back(num % d);
        num /= d;
    } while (num != 0);
    return result;
}

int BtoA(vector<int> num, int d) {//将逆序之后的D进制数转换为十进制数q
    int p = 1, result = 0;
    for (int i = num.size() - 1; i >= 0; --i) {
        result += p * num[i];
        p *= d;
    }
    return result;
}

int n, d;

int main() {
    while (1) {
        cin >> n;
        if (n < 0) break;
        cin >> d;
        if (!isPrime(n)) {//N不是素数直接跳过
            cout << "No\n";
            continue;
        }
        vector<int> nums = changeD(n, d);
        int n = BtoA(nums, d);
        if (isPrime(n)) {
            cout << "Yes\n";
        } else {
            cout << "No\n";
        }
    }
    return 0;
}

Golang Solution:

 

package main

import (
    "fmt"
)

func isPrime(n int) bool {
    if n <= 1 {
        return false
    }
    for i := 2; i*i <= n; i++ {
        if n%i == 0 {
            return false
        }
    }
    return true
}

func changeD(n, d int) []int {
    var result []int
    for {
        result = append(result, n%d)
        n /= d
        if n == 0 {
            break
        }
    }
    return result
}

func bToA(nums []int, d int) int {
    result, p := 0, 1
    for i := len(nums) - 1; i >= 0; i-- {
        result += nums[i] * p
        p *= d
    }
    return result
}

func main() {
    var n, d int
    for {
        fmt.Scan(&n)
        if n < 0 {
            break
        }
        fmt.Scan(&d)
        if !isPrime(n) {
            fmt.Println("No")
            continue
        }
        num := changeD(n, d)
        n = bToA(num, d)
        if isPrime(n) {
            fmt.Println("Yes")
        } else {
            fmt.Println("No")
        }
    }
}

 

 

PAT A1015 C++/Go语言题解及注意事项

原文:https://www.cnblogs.com/tao10203/p/13771397.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!