求调昨天ABC G题
  • 板块学术版
  • 楼主123456Mm
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/1 17:22
  • 上次更新2023/11/4 12:17:53
查看原帖
求调昨天ABC G题
241260
123456Mm楼主2021/8/1 17:22

如题,思路参照了官方题解

但是它WA掉了,请问哪里有锅,谢谢。

#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
const int MAXN=1e6+10;
long long ans=1;
long long n;
vector<long long> d;
void fj(){
	for(long long i=1;i<sqrt(n);i++){
		if(n%i==0){
			d.push_back(i);
			d.push_back(n/i);
		}
	} 
	long long x=sqrt(n);
	if(x*x==n)d.push_back(x);
}
long long g[MAXN];
int main(){
	cin>>n;
	n--;
	fj();
	sort(d.begin(),d.end());
	//for(int i=0;i<d.size();i++)cout<<d[i]<<" ";
	for(int i=d.size()-1;i>=0;i--){
		g[i]=n/d[i];
		g[i]%=mod;
		for(int j=i+1;j<d.size();j++){
			if(d[j]%d[i]==0){
				g[i]=(g[i]+mod-g[j])%mod;
			}
		}
	}
	//for(int i=0;i<d.size();i++)cout<<g[i]<<endl;
	for(int i=0;i<d.size();i++){
		ans+=n/d[i]*g[i];
		ans%=mod;
	}
	cout<<ans<<endl;
} 
2021/8/1 17:22
加载中...