

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 n,s=0,d[10000007]={0};
vector <long long> b;
bool p[10000007];
void sangngto()
{
memset(p,true,sizeof(p));
p[0]=false;
p[1]=false;
for(int i=2;i*i<=1e7;i++)
if(p[i])
{
for(int j=i*i;j<=1e7;j+=i) p[j]=false;
}
}
int main()
{
sangngto();
cin>>n;
for(int i=2;i<=1e7;i++)
if(p[i]) b.push_back(i);
for(int i=0;i<b.size();i++)
{
for(int j=i;j<b.size();j++)
{
if(b[i]*b[j]<=n&&d[b[i]*b[j]]==0)
{
s+=b[i]*b[j];
d[b[i]*b[j]]=1;
}
else break;
}
}
cout<<n<<" "<<s;
}
Mình làm bên vinhdinhcoder đã accepted rồi nhé
Hãy giúp mọi người biết câu trả lời này thế nào?
#include <iostream>
#define llong long long
#define FOR(i, l, r) for(int i=l; i<=r; i++)
#define FORD(i, r, l) for(int i=r; i>=l; i--)
#define REP(i, l, r) for(int i=l; i<=r; i++)
using namespace std;
llong n, res, sum, r, a[5000005], b[5000005];
void eratos() {
int NN = n/2;
FOR(i,2,NN) if (!a[i]) {
b[++r] = i;
FOR(j,i,NN/i) a[i*j] = true;
}
}
bool check_prime(llong x) {
for(llong i=2; i*i <= x; i++) if (x%i == 0) return false;
return true;
}
void Process() {
int l=1;
FORD(i,r,1) {
while (l <= r && b[l]*b[i] <= n) sum += b[l++];
res += sum * b[i];
if (l > i) res += b[i]*b[i];
}
cout << n << ' ' << res / 2;
}
int main()
{
scanf("%I64d", &n);
eratos();
Process();
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin