CodeStar2023年春第3周周赛普及奠基组

发布时间 2023-04-06 12:53:14作者: V_Melville

T1:字符串加密

本题难度简单,根据题目描述模拟即可。

代码实现
#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    
    for (char& c : s) {
        if (islower(c)) c -= 32;
        else c += 32;
    }
    
    reverse(s.begin(), s.end());
    
    cout << s << '\n';
    
    return 0;
}

T2:美丽的数

本题难度简单,只有完全平方数才可能满足只有 \(3\) 个约数,再满足算术平方根是质数时,就一定只有 \(3\) 个约数,那么可以先筛出所有质数,然后每次判断给定的数是否为完全平方数且算术平方根是质数。

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;
using ll = long long;

// linear sieve
vector<int> ps, pf;
void sieve(int mx) {
    pf.resize(mx + 1);
    rep(i, mx + 1) pf[i] = i;
    for (int i = 2; i <= mx; ++i) {
        if (pf[i] == i) ps.push_back(i);
        rep(j, ps.size()) {
            int x = ps[j] * i;
            if (x > mx) break;
            pf[x] = ps[j];
        }
    }
}

int main() {
    sieve(1e6);
    
    int q;
    cin >> q;
    
    while (q--) {
        ll x;
        cin >> x;
        ll y = sqrtl(x);
        if (y > 1 and y*y == x and pf[y] == y) puts("Yes");
        else puts("No");
    }
    
    return 0;
}