赶脚多校的题太丧心病狂了!
还是写个博客留个纪念吧!
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<vector>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define nn 1000010
#define ll long long
#define ULL unsiged long long
#define mod 258280327
#define inf oxfffffffffff
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
//// ((`'-"` `""-'`))
//// ) - - (
//// / (o _ o) \
//// \ ( 0 ) /
//// _'-.._ '=' _..-'_
//// /`;#'#'#. -. #'#'#;`\
//// \_)) '#' ((_/
//// #. ☆ ☆ ☆ .#
//// '#. 求 A C! .#'
//// /'#. .#'\
//// _\\'#. .#'//_
//// (((___)'#'(___)))
//-----------------------------SB-----------------------------------//
ll f[nn],t[nn],g[nn],s[nn];
bool vis[nn];
void init()
{
memset(vis,false,sizeof(vis));
for(int i=0;i<nn;i++)
{
g[i]=1;
t[i]=0;
}
g[0]=0;
for(int i=2;i<nn;i++)
{
if(!vis[i])
{
for(int j=i;j<nn;j+=i)
{
g[j]=g[j]*2%mod;
vis[j]=true;
}
}
}
for(int i=1;i<nn;i++)
{
for(int j=i;j<nn;j+=i)
t[j]=(t[j]+g[j/i-1])%mod;
}
f[1]=s[1]=1;
for(int i=2;i<nn;i++)
{
f[i]=((f[i-1]+2*i-1)%mod-t[i-1])%mod;
s[i]=(s[i-1]+f[i])%mod;
}
}
int main()
{
init();
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
//cout<<s[n]<<endl;
printf("%lld\n",s[n]);
}
return 0;
}