1 //#include <bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 #include<string> 7 #include<vector> 8 #include<stack> 9 #include<bitset> 10 #include<cstdlib> 11 #include<cmath> 12 #include<set> 13 #include<list> 14 #include<deque> 15 #include<map> 16 #include<queue> 17 18 using namespace std; 19 20 const int N = 1000010; 21 22 typedef long long LL; 23 LL TT,nn,k; 24 namespace Min25 { 25 26 int prime[N], id1[N], id2[N], flag[N], ncnt, m; 27 28 LL g[N], sum[N], a[N], T, n; 29 inline void fff() 30 { 31 for(int i=0;i<=N;i++){ 32 prime[i]=0; 33 id1[i]=0; 34 id2[i]=0; 35 flag[i]=0; 36 g[i]=0; 37 sum[i]=0; 38 a[i]=0; 39 } 40 ncnt=0; 41 m=0; 42 T=0; 43 n=0; 44 } 45 inline int ID(LL x) { 46 return x <= T ? id1[x] : id2[n / x]; 47 } 48 49 inline LL calc(LL x) { 50 return x * (x + 1) / 2 - 1; 51 } 52 53 inline LL f(LL x) { 54 return x; 55 } 56 57 inline void init() { 58 T = sqrt(n + 0.5); 59 for (int i = 2; i <= T; i++) { 60 if (!flag[i]) prime[++ncnt] = i, sum[ncnt] = sum[ncnt - 1] + i; 61 for (int j = 1; j <= ncnt && i * prime[j] <= T; j++) { 62 flag[i * prime[j]] = 1; 63 if (i % prime[j] == 0) break; 64 } 65 } 66 for (LL l = 1; l <= n; l = n / (n / l) + 1) { 67 a[++m] = n / l; 68 if (a[m] <= T) id1[a[m]] = m; else id2[n / a[m]] = m; 69 g[m] = calc(a[m]); 70 } 71 for (int i = 1; i <= ncnt; i++) 72 for (int j = 1; j <= m && (LL)prime[i] * prime[i] <= a[j]; j++) 73 g[j] = g[j] - (LL)prime[i] * (g[ID(a[j] / prime[i])] - sum[i - 1]); 74 } 75 76 inline LL solve(LL x) { 77 if (x <= 1) return x; 78 return n = x, init(), g[ID(n)]; 79 } 80 81 } 82 83 void extend_gcd(LL a,LL b,LL &x,LL &y) 84 { 85 if(b==0) { 86 x=1,y=0; 87 return; 88 } 89 extend_gcd(b,a%b,x,y); 90 LL tmp=x; 91 x=y; 92 y=tmp-(a/b)*y; 93 } 94 LL mod_inverse(LL a,LL m) 95 { 96 LL x,y; 97 extend_gcd(a,m,x,y); 98 return (m+x%m)%m; 99 } 100 /*int main() 101 { 102 LL sum; 103 cin>>TT; 104 while(TT--){ 105 sum=0; 106 107 scanf("%lld%lld",&nn,&k); 108 if(nn==1){ 109 printf("0\n"); 110 }else if(nn==2){ 111 printf("6\n"); 112 }else{ 113 LL a=mod_inverse(2,k); 114 //cout<<a<<endl; 115 sum=(((((nn%k)*(nn%k))%k+(nn*3)%k)%k)*a)%k; 116 //cout<<sum<<endl; 117 Min25::fff(); 118 sum=(sum-4+Min25::solve(nn+1))%k; 119 printf("%lld\n",sum%k); 120 } 121 } 122 return 0; 123 }*/ 124 int main() 125 { 126 int n; 127 scanf("%d",&n); 128 printf("%d\n",Min25::solve(n)); 129 }
//#include <bits/stdc++.h>
#include
<cstdio>
#include
<cstring>
#include
<algorithm>
#include
<iostream>
#include
<string>
#include
<vector>
#include
<stack>
#include
<bitset>
#include
<cstdlib>
#include
<cmath>
#include
<set>
#include
<list>
#include
<deque>
#include
<map>
#include
<queue>
using
namespace
std;
const
int
N =
1000010;
typedef
long
long
LL;
LL
TT,
nn,
k;
namespace
Min25 {
int
prime[
N],
id1[
N],
id2[
N],
flag[
N],
ncnt,
m;
LL
g[
N],
sum[
N],
a[
N],
T,
n;
inline
void
fff()
{
for(
int
i=
0;
i<=
N;
i++){
prime[
i]=
0;
id1[
i]=
0;
id2[
i]=
0;
flag[
i]=
0;
g[
i]=
0;
sum[
i]=
0;
a[
i]=
0;
}
ncnt=
0;
m=
0;
T=
0;
n=
0;
}
inline
int
ID(
LL
x) {
return
x <=
T ?
id1[
x] :
id2[
n /
x];
}
inline
LL
calc(
LL
x) {
return
x * (
x +
1) /
2 -
1;
}
inline
LL
f(
LL
x) {
return
x;
}
inline
void
init() {
T =
sqrt(
n +
0.5);
for (
int
i =
2;
i <=
T;
i++) {
if (!
flag[
i])
prime[++
ncnt] =
i,
sum[
ncnt] =
sum[
ncnt -
1] +
i;
for (
int
j =
1;
j <=
ncnt &&
i *
prime[
j] <=
T;
j++) {
flag[
i *
prime[
j]] =
1;
if (
i %
prime[
j] ==
0)
break;
}
}
for (
LL
l =
1;
l <=
n;
l =
n / (
n /
l) +
1) {
a[++
m] =
n /
l;
if (
a[
m] <=
T)
id1[
a[
m]] =
m;
else
id2[
n /
a[
m]] =
m;
g[
m] =
calc(
a[
m]);
}
for (
int
i =
1;
i <=
ncnt;
i++)
for (
int
j =
1;
j <=
m && (
LL)
prime[
i] *
prime[
i] <=
a[
j];
j++)
g[
j] =
g[
j] - (
LL)
prime[
i] * (
g[
ID(
a[
j] /
prime[
i])] -
sum[
i -
1]);
}
inline
LL
solve(
LL
x) {
if (
x <=
1)
return
x;
return
n =
x,
init(),
g[
ID(
n)];
}
}
void
extend_gcd(
LL
a,
LL
b,
LL
&
x,
LL
&
y)
{
if(
b==
0) {
x=
1,
y=
0;
return;
}
extend_gcd(
b,
a%
b,
x,
y);
LL
tmp=
x;
x=
y;
y=
tmp-(
a/
b)*
y;
}
LL
mod_inverse(
LL
a,
LL
m)
{
LL
x,
y;
extend_gcd(
a,
m,
x,
y);
return (
m+
x%
m)%
m;
}
/*int main()
{
LL sum;
cin>>TT;
while(TT--){
sum=0;
scanf("%lld%lld",&nn,&k);
if(nn==1){
printf("0\n");
}else if(nn==2){
printf("6\n");
}else{
LL a=mod_inverse(2,k);
//cout<<a<<endl;
sum=(((((nn%k)*(nn%k))%k+(nn*3)%k)%k)*a)%k;
//cout<<sum<<endl;
Min25::fff();
sum=(sum-4+Min25::solve(nn+1))%k;
printf("%lld\n",sum%k);
}
}
return 0;
}*/
int
main()
{
int
n;
scanf(
"%d",&
n);
printf(
"%d
\n
",
Min25::
solve(
n));
}