

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <bits/stdc++.h>
using namespace std;
long long ktrsnt(long long n)
{
for(long long i=2;i<=sqrt(n);i++)
{
if(n%i==0)return 0;
}
if(n<2)return 0;
return 1;
}
long long tongchuso(long long n)
{
long long tong=0;
while(n>0)
{
tong=tong+n%10;
n=n/10;
}
return tong;
}
long long p[100000000];
int main()
{
long long n,dem=0;
cin>>n;
for(long long i=1;i<=n;i++)
{
p[i]=1;
}
p[1]=0;
p[0]=0;
for(long long i=2;i<=sqrt(n);i++)
{
if(ktrsnt(i)==1)
{
for(long long j=i+i;j<=n;j=j+i)p[j]=0;
}
}
for(long long i=1;i<=n;i++)if((p[i]==1)&&(ktrsnt(tongchuso(i))==1))dem++;
cout<<dem;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
C++
#include <iostream>
#include <vector>
using namespace std;
// Hàm kiểm tra số nguyên tố
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
// Hàm tính tổng các chữ số của số n
int digitSum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int main() {
int n;
cin >> n;
// Tìm tất cả các số nguyên tố không vượt quá n
vector<int> primes;
vector<bool> isComposite(n + 1, false);
for (int i = 2; i <= n; i++) {
if (!isComposite[i]) {
primes.push_back(i);
for (int j = i * i; j <= n; j += i) {
isComposite[j] = true;
}
}
}
// Kiểm tra xem từng số nguyên tố có phải là số song tố hay không
int count = 0;
for (int prime : primes) {
if (isPrime(digitSum(prime))) {
count++;
}
}
cout << count << endl;
return 0;
}
*Giải thích:
B1: Tìm tất cả số nguyên tố không vượt quá n và kiểm tra xem mỗi số nguyên tố đó có phải là số song tố không. ( Để tìm số nguyên tố bạn có thể tham khảo thuật toán Eratosthenes trên google )
B2: Sau khi tìm được số nguyên tố ta cần kiểm tra tổng các chữ số của số đó
B3: In ra kết quả
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin