优美等式

想不到吧,我被卡常了。

http://iai.sh.cn/problem/612

#pragma GCC optimize("Ofast","-funroll-loops") #pragma GCC target("sse4.1","sse4.2","ssse3","sse3","sse2","sse","avx2","avx","popcnt","tune=native") #include <bits/stdc++.h> #define pb push_back using namespace std; #define N (int)(2e6+5) #define M (int)(2e6) #define ull unsigned long long #define base 19260817 #define ll long long bool vis[N]; ull val[N],B[N]; int pri[N],nw[N],cnt,las[N]; int n,m; ll ans; unordered_map<ull,int>mp; void init() { for(int i=1;i<=M;i++) nw[i]=i,las[i]=0; for(int i=2;i<=M;i++) { if(!vis[i]) { pri[++cnt]=i; val[i]=1; las[i]=cnt; nw[i]=1; for(int j=i+i;j<=M;j+=i) { vis[j]=1; int qwq=0; while(nw[j]%i==0) ++qwq,nw[j]/=i; val[j]=val[j]*B[cnt-las[j]]; if(qwq&1) ++val[j]; las[j]=cnt; } } } for(int i=1;i<=M;i++) val[i]=val[i]*B[cnt-las[i]]; } signed main() { // freopen("xgf.out","w",stdout); cin.tie(0); ios::sync_with_stdio(false); B[0]=1; for(int i=1;i<=M;i++) B[i]=B[i-1]*base; init(); // for(int i=1;i<=M;i++) { // int x=i,las=0; ull h=0; //// cout<<x<<'\n'; // for(int j:vec[i]) { // int qwq=0; // while(x%j==0) ++qwq,x/=j; //// cout<<id[j]<<" "<<las<<'\n'; // h=h*B[id[j]-las]; las=id[j]; // if(qwq&1) ++h; // } // h=h*B[cnt-las]; // val[i]=h; // } cin>>n>>m; if(n<m) swap(n,m); for(int i=1;i<=m;i++) ++mp[val[i]]; for(int i=1;i<=n;i++) ans+=mp[val[i]]; cout<<ans; return 0; }

__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/16016973.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示