diff --git a/day12/20240814sol.pdf b/day12/20240814sol.pdf new file mode 100644 index 0000000..0c9ef06 Binary files /dev/null and b/day12/20240814sol.pdf differ diff --git a/day12/U466180/U466180.cpp b/day12/U466180/U466180.cpp index d650c15..0e32cf9 100644 --- a/day12/U466180/U466180.cpp +++ b/day12/U466180/U466180.cpp @@ -4,9 +4,10 @@ using namespace std; #define int long long -const int MAX_N = 2e8+5; +const int MAX_N = 1000+5; int a[MAX_N]; int n,amax=INT_MIN,ans=0; +unordered_map um; int readint(); signed main(signed argc,char *argv[]){ @@ -22,16 +23,22 @@ signed main(signed argc,char *argv[]){ #endif n=readint(); for(int i=1;i<=n;i++){ - int input=readint(); - a[input]++; - amax=max(amax,input); + a[i]=readint(); } - for(int i=2;i<=amax;i++){ - int nans = 0; - for(int j=1;(i*j)<=amax;j++){ - nans+=a[i*j]*i*j; + for(int i=1;i<=n;i++){ + int num=a[i]; + for(int j=2;j<=sqrt(a[i]);j++){ + if(num%j==0){ + um[j]+=a[i]; + while(num%j==0)num/=j; + } } - ans=max(ans,nans); + if(num>1){ + um[num]+=a[i]; + } + } + for(auto i : um){ + ans+=i.second; } cout<