日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【数学】gcd

發布時間:2023/12/15 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 【数学】gcd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上個階段太頹也沒怎么寫題解導致直接炸掉,所以這個階段爭取繼續寫吧(咕咕咕)

題目內容

有 (n) 個正整數 (x_1) ~ (x_n),初始時狀態均為未選。 有 (m) 個操作,每個操作給定一個編號 (i),將 (x_i) 的選取狀態取反。 每次操作后,你需要求出選取的數中有多少個互質的無序數對。

數據范圍

(n,mleq 200000,x_ileq 500000)

思路

做數學題總是很需要磨。

首先解釋一波題意,選取狀態取反的是 (x_i),互質的無序數對指的也是 (x) 間形成的數對。

首先考慮不修改怎么做,那么問題就是有 (n) 個正整數,求其中互質的數對的個數。

互質即 (gcd(a,b)=1)。那我們可以定義 (f[i]) 表示 (gcd=i) 的數對個數??紤]如何求出 (f[i])。定義 (g[i]) 表示 (gcd) 為 (i) 的倍數的數對個數。那么顯然有:

[g[i]=sumlimits_{ivert d}f[d]
]

嗯,這個顯然是莫比烏斯反演的第二個式子。那我們就可以得到 (f[i]) 的計算式了:

[f[i]=sumlimits_{ivert d}mu(fracozvdkddzhkzd{i})g[d]
]

那么現在的問題就是如何求出 (g[i])。定義 (s[i]) 表示 (i) 的倍數的個數。我們可以知道,(i) 的倍數組成的數對的 (gcd) 一定也是 (i) 的倍數。那么我們將其兩兩配對得到的方案數即是 (g[i]):

[g[i]=cfrac{s[i] imes(s[i]-1)}{2}
]

而 (s[i]) 很好求,當我們加入或刪除一個數的時候,直接枚舉其因數修改就可以了。記錄答案只需要刪掉原來的再加上現在的。那么帶修改的我們也完成了。

最后的答案就是 (f[1]),所以得到結論,(1) ~ (n) 中互質的數對的個數即是:

[sumlimits_{d=1}^nmu(d)g[d]
]

時間復雜度 (O(msqrt{max x})),需要一點點卡常。

Code
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
int n,m;
int a[maxn];
long long ans;
long long s[maxn],g[maxn];
bool vis[maxn];

inline int read(){
    int x=0;bool fopt=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar())if(ch=='-')fopt=0;
    for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-48;
    return fopt?x:-x;
}

int pri[maxn],mobius[maxn];
bool notpri[maxn];
inline void EulerSieve(){
    notpri[0]=1;notpri[1]=1;mobius[1]=1;
    for(int i=2;i<=5e5;i++){
        if(!notpri[i]){
            pri[++pri[0]]=i;
            mobius[i]=-1;
        }
        for(int j=1;j<=pri[j]&&i*pri[j]<=5e5;j++){
            notpri[i*pri[j]]=1;
            if(i%pri[j]==0){
                mobius[i*pri[j]]=0;
                break;
            }else mobius[i*pri[j]]=-mobius[i];
        }
    }
}

signed main(){
#ifndef LOCAL
    freopen("gcd.in","r",stdin);
    freopen("gcd.out","w",stdout);
#endif
    n=read();m=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    EulerSieve();
    for(register int i=1;i<=m;i++){
        int x=read();vis[x]=!vis[x];
        int d=vis[x]?1:-1;
        for(register int j=1;j*j<=a[x];j++){
            if(a[x]%j)continue;
            s[j]+=d;
            ans-=mobius[j]*g[j];
            g[j]=s[j]*(s[j]-1)/2;
            ans+=mobius[j]*g[j];
            if(j*j!=a[x]){
                s[a[x]/j]+=d;
                ans-=mobius[a[x]/j]*g[a[x]/j];
                g[a[x]/j]=s[a[x]/j]*(s[a[x]/j]-1)/2;
                ans+=mobius[a[x]/j]*g[a[x]/j];
            }
        }
        printf("%lld
",ans);
    }
    return 0;
}

總結

以上是生活随笔為你收集整理的【数学】gcd的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美99 | 黄色网页免费在线观看 | 亚洲精品中文字幕在线观看 | 久久国产香蕉 | 欧美日韩国产专区 | 国产精品二区在线 | 色.com| 免费av网站在线播放 | 国产亚洲AV无码成人网站在线 | 国产成人8x视频一区二区 | 午夜免费福利在线 | 亚洲欧洲在线观看 | 国内精品视频在线 | 色综合天天色综合 | 超碰影院在线 | 动漫av网站| 国产av无码国产av毛片 | 国产无套内射又大又猛又粗又爽 | 91亚洲精品久久久蜜桃借种 | 亚洲女同女同女同女同女同69 | 日韩国产欧美一区二区三区 | 视频在线观看免费大片 | 黄色喷水网站 | 操久久久 | 亚洲久爱 | 欧洲亚洲视频 | 亚洲天天做 | 日韩精品一二区 | 东京热无码av一区二区 | 精品亚洲aⅴ无码一区二区三区 | 欧美大白屁股 | 亚洲av无码国产精品久久不卡 | 91www| 亚洲乱码国产乱码精品精软件 | 中文一区二区 | 亚洲黄色精品 | 成年丰满熟妇午夜免费视频 | 成人在线观看你懂的 | 看免费黄色片 | 人人妻人人澡人人爽欧美一区双 | 国产制服丝袜 | 露胸app| 久久少妇网| 亚洲第一成肉网 | 一级片久久久久 | 中文字幕第88页 | 国产女教师一区二区三区 | 久久精品无码av | 国产精品19p| 国产啊啊啊啊 | 日韩成人综合 | 苍井空浴缸大战猛男120分钟 | 亚洲涩涩涩| 欧美一区二区三区小说 | 超碰1000| 国产成人在线观看网站 | 日韩免费网址 | 欧美日韩在线观看一区 | 欧美激情视频二区 | av电影网站在线观看 | 中文字幕第6页 | 国产精品久久久网站 | 国产av精国产传媒 | 国产xxxxxx | 欧美cccc极品丰满hd | 精品国产AV色欲天媒传媒 | 日本一区二区人妻 | 激情偷乱人成视频在线观看 | 亚洲女人久久久 | 国产美女主播 | 性欧美巨大乳 | 欧美成人精品一区二区 | 色呦呦视频在线 | 国产亚洲91 | 日本亚洲高清 | 中文字幕第页 | 成人亚洲黄色 | 97超碰人人| 亚洲情侣av | 精品亚洲中文字幕 | 夜夜嗨一区 | 二区三区在线 | 精品蜜桃av | 免费中文字幕视频 | 国产美女性生活 | 蝌蚪自拍网站 | 美女校花脱精光 | 中文字幕在线播放第一页 | 校园春色亚洲色图 | 蜜桃av乱码一区二区三区 | 看了下面会湿的视频 | 国产特黄大片aaaa毛片 | 欧美黄色录像视频 | 99re这里 | 国产精品久久久久久久免费大片 | 制服丝袜先锋影音 | 最新极品jizzhd欧美 | 国产精品第9页 | 精品国产aⅴ一区二区三区四川人 |