Trang chủ Tin Học Lớp 11 Một số nguyên dương được gọi là đẹp nếu tổng...

Một số nguyên dương được gọi là đẹp nếu tổng bình phương các chữ số của nó (trong dạng biểu diễn thập phân) là một số nguyên tố. Chẳng hạn: Số 12 là số đẹp vì

Câu hỏi :

Một số nguyên dương được gọi là đẹp nếu tổng bình phương các chữ số của nó (trong dạng biểu diễn thập phân) là một số nguyên tố. Chẳng hạn: Số 12 là số đẹp vì 12 + 22 = 5 là số nguyên tố. Các số đẹp được sắp xếp theo thứ tự tăng dần của giá trị bắt đầu từ 1. Yêu cầu: Hãy tìm số đẹp thứ n. Dữ liệu vào: - Một dòng chứa một số nguyên dương n (1

Lời giải 1 :

- Số đẹp thứ 10000 là 50695 nên đặt giới hạn là 1e5 cho tròn :)

- Số có tổng bình phương chữ số lớn nhất: 99999 (`5.9^2 = 405`). Do đó ta sàng trước [1..405]

- Công thức (tính tổng b.p các số từ [1..n]): sum[i] = sum[i / 10] + `(i % 10)^2`

- Code:

#include <iostream>
#include <vector>
using namespace std;

const int Lim = 1e5;
vector<int> pr;
vector<int> lpf;
void linear_sieve(int n = 500) {
    pr = {2};
    lpf.assign(n + 1, 2);

    for (int x = 3; x <= n; x += 2) {
        if (lpf[x] == 2) pr.push_back(lpf[x] = x);
        for (int i = 1; i < pr.size() && pr[i] <= lpf[x] && pr[i] * x <= n; ++i)
            lpf[pr[i] * x] = pr[i];
    }
}

bool prime(int x) {
    if (x <= 1) return false;
    return lpf[x] == x;
}

int n, sum[Lim + 1], res = 1;
int main() {
    cin >> n;
    linear_sieve();
    for (int i = 1; i <= Lim; ++i) sum[i] = sum[i / 10] + ((i % 10) * (i % 10));
    
    for (int i = 1; n > 0; ++i) {
        if (prime(sum[i])) --n, res = i;
    }
    cout << res;
}

Thảo luận

-- Em nộp lên wed bị lỗi chương trình ạ
-- ủa mình chạy thấy bth mà :((
-- Mình nộp wed bị compiler error ạ
-- bạn nộp vào ngôn ngữ gì v
-- c++ ạ

Lời giải 2 :

//--Coder_Bot--///#pragma GCC optimize("O2")//#pragma GCC target("avx,avx2,fma")#include<bits/stdc++.h>using namespace std;
#define el cout <<"\n"#define ll long long#define ld long double#define f0(i,n) for (int i=0;i< n;i++)#define f1(i,n) for (int i=1;i<=n;i++)#define fv(v,u) for (auto v : u)#define fi first#define se second#define maxn 55004#define maxm 1000006#define names "Bot"int MOD = 1e9 + 7;int INF = INT_MAX;
//declareint n;vector <int> dp;//Coding_from_here;bool prime(int n){ for (ll i = 2;i * i <= n;i++) if (n % i == 0) return 0; return n > 1;}int cal(int n){ int res = 0; while (n){ res += (n%10) * (n%10); n/=10; } return res;}void sol(){ for(int i = 2;i<maxn;i++) if (prime(cal(i))) dp.push_back(i);}int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); sol(); cin >> n; cout << dp[n-1];}//--Code_Of_Life--//

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 11

Lớp 11 - Năm thứ hai ở cấp trung học phổ thông, gần đến năm cuối cấp nên học tập là nhiệm vụ quan trọng nhất. Nghe nhiều đến định hướng sau này rồi học đại học. Ôi nhiều lúc thật là sợ, hoang mang nhưng các em hãy tự tin và tìm dần điều mà mình muốn là trong tương lai nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247