「LibreOJ β Round #4」求和 莫比烏斯函數

https://loj.ac/problem/528

這裏寫圖片描述

不含平方因子的數纔會有 -1 和 1纔會對結果造成影響,
所有排除掉所有含有平方因子的數就好

開始的時候平方是1 就是沒有平方因子的情況,減去所有平方因子的情況

#include <bits/stdc++.h>

using namespace std;

const int maxn=10000001;  
bool vis[maxn+10];  
int prime[maxn+10],mu[maxn+10];  
int cnt;  
typedef long long ll;
const ll mod = 998244353;
int sum[maxn];
void Init(){  
    int N=maxn;  
    memset(prime,0,sizeof(prime));  
    memset(mu,0,sizeof(mu));  
    memset(vis,0,sizeof(vis));  
    mu[1] = 1;  
    cnt = 0;  
    for(int i=2; i<N; i++){  
        if(!vis[i]){  
            prime[cnt++] = i;  
            mu[i] = -1;  
        }  
        for(int j=0; j<cnt&&i*prime[j]<N; j++){  
            vis[i*prime[j]] = 1;  
            if(i%prime[j]) mu[i*prime[j]] = -mu[i];  
            else{  
                mu[i*prime[j]] = 0;  
                break;  
            }  
        }  
    }
    sum[0]=0;
    for(int i=1;i<N;i++)
        sum[i]=sum[i-1]+mu[i];
}


int main()
{
    ll n,m;
    Init();
    scanf("%lld%lld",&n,&m);
    ll mii=min(n,m);
    ll ans=0;
    for(ll i=1;i*i<=mii;i++)
    {
        ll t1=n/(i*i);
        ll t2=m/(i*i);
        t1%=mod;
        t2%=mod;
        ans=(ans+(t1*t2*mu[i]+mod)%mod+mod)%mod;
    }
    printf("%lld\n",ans );
}
發佈了60 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章