zoukankan      html  css  js  c++  java
  • 839D

    839D - Winter is here

    题意:

    题解:

    那个式子我都没想着去化简~太弱了=_=

    参考的dalao的代码~

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn=200010;
     5 const int mod=1e9+7;
     6 
     7 int cnt1[maxn*5],cnt2[maxn*5];
     8 ll dp[maxn*5];
     9 int base[maxn];
    10 
    11 int main(){
    12     base[0]=1;
    13     for(int i=1;i<maxn;i++) base[i]=base[i-1]*2%mod;  //预处理
    14     int n;
    15     scanf("%d",&n);
    16     int x;
    17     for(int i=0;i<n;i++){
    18         scanf("%d",&x);
    19         cnt1[x]++;
    20     }
    21     for(int i=2;i<=1000000;i++){
    22         for(int j=i;j<=1000000;j+=i){
    23             cnt2[i]+=cnt1[j];
    24         }
    25     }
    26     for(int i=1000000;i>=2;i--){
    27         if(cnt2[i]==0) continue;
    28         dp[i]=(1LL*base[cnt2[i]-1]*cnt2[i])%mod;
    29         for(int j=i*2;j<=1000000;j+=i) dp[i]=(dp[i]+mod-dp[j])%mod;
    30     }
    31     int ans=0;
    32     for(int i=2;i<=1000000;i++) ans=(ans+i*dp[i])%mod;
    33     printf("%d
    ",ans);
    34     return 0;
    35 }
    ac

    下面这个更优一些(不完整

     1 int N;
     2 ll A[202020];
     3 ll mo=1000000007;
     4 
     5 ll num[1010100];
     6 ll p[1010100];
     7 
     8 ll modpow(ll a, ll n = mo-2) {
     9     ll r=1;
    10     while(n) r=r*((n%2)?a:1)%mo,a=a*a%mo,n>>=1;
    11     return r;
    12 }
    13 
    14 void solve() {
    15     int i,j,k,l,r,x,y; string s;
    16     
    17     cin>>N;
    18     FOR(i,N) {
    19         cin>>A[i];
    20         for(x=1;x*x<=A[i];x++) if(A[i]%x==0) {
    21             num[x]++;
    22             if(x*x!=A[i]) num[A[i]/x]++;
    23         }
    24     }
    25     
    26     ll tot=0;
    27     for(i=1000000;i>=2;i--) {
    28         if(num[i]) {
    29             p[i]=num[i]*modpow(2,num[i]-1)%mo;
    30             for(j=i*2;j<=1000000;j+=i) p[i]-=p[j];
    31             p[i]=(p[i]%mo+mo)%mo;
    32             
    33             (tot+=p[i]*i)%=mo;
    34         }
    35     }
    36     cout<<tot<<endl;
    37 }
    View Code

    另一种解法,还没仔细看~

  • 相关阅读:
    [做题记录-乱做] [AGC004F] Namori
    字符串分割去除空格
    逆向实战01-嘟嘟牛在线
    mysql超8小时解决
    macbook golang的debug模式不好使
    博客暂时废弃公告
    [干货] 博客园主题
    [Contest on 2021.10.14] 我靠,真的好困!
    [Contest on 2021.10.9] 说好的 100kb 呢?
    [Contest on 2021.10.7] 已经起不了标题了...
  • 原文地址:https://www.cnblogs.com/yijiull/p/7363868.html
Copyright © 2011-2022 走看看