SPOJ DIVCNT2 - Counting Divisors (square)
題目描述:
求
i=1∑nσ0(i2)
其中
σ0表示約數個數,
n≤1012,時間限制20s
題目分析:
σ0(i)=d∣i∑σ0(i2)=d∣i∑2ω(d)
其中,
ω(d)表示
d的質因子個數,上式可以理解為從i中選出一些質因子,每個質因子可以取當前次冪或者加上最高次冪兩種選擇。
可看出
2ω(d)為d的無平方因子個數,所以
2ω(d)=k∣d∑∣μ(k)∣
整理一下,記
g(i)=∣μ(k)∣,那麼
σ0(i2)=(g∗I)∗I=g∗(I∗I)=g∗σ0
所以
i=1∑nσ0(i2)=i=1∑nd∣i∑∣μ(di)∣∗σ0(d)=i=1∑n∣μ(i)∣d=1∑inσ0(d)
顯然需要處理
∣μ(i)∣和
σ0(i)的字首和
線性篩五千萬到一億(少了會TLE),剩下的可以這麼算:
- 從"
n以內無平方因子數的個數"的意義出發,考慮容斥,可以得出:
i=1∑n∣μ(i)∣=i=1∑n μ(i)∗⌊i2n⌋
O(n )計算 - 約數個數的字首和很好算:
i=1∑nσ0(i)=i=1∑n⌊in⌋
O(n )分塊計算
與杜教篩的時間複雜度分析類似,總時間 O(n32)
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
const int N = 50000000;
int p[N/10],mu[N+5],sd[N+5],sm[N+5];
bool v[N+5];
void Prime(int N)
{
mu[1]
相關推薦
SPOJ DIVCNT2 - Counting Divisors (square)
題目描述: 求 ∑ i
[SPOJ] DIVCNT2 - Counting Divisors (square)
sqrt bsp 操作 new size omega uri 打了 color 題解: 操作挺多的一道題 網上證明挺多就不打了 $\sigma_0(n^2) = \sum_{d\mid n} 2^{\omega(d)} = \sum_{d\mid n} \sum_{e
hdu6069 多校Counting Divisors
urn def ever http 16px += () 判斷 ons 思路:對於n^k其實就是每個因子的個數乘了一個K。然後現在就變成了求每個數的每個質因子有多少個,但是比賽的時候只想到sqrt(n)的分解方法,總復雜度爆炸,就一直沒過去,然後賽後看官方題解感
Counting Divisors((l~r)^k的因子數和)
題意:令d(x)表示x的因子數,求∑ri=ld(ik)∑i=lrd(ik),r,l 為1e12 ,r-l為1e6 解析: 剛開始想到的是尤拉函式值,結果ikik就勸退了,換一種常規的思路,從因子的角度去思考,按照基本定理:n=pq11∗pq22∗...p
hdu6069 Counting Divisors && lightoj1028
由易到難:lightoj1028->hdu6069 lightoj1028 : http://www.lightoj.com/volume_showproblem.php?problem=10
[SPOJ20174]DIVCNT3 - Counting Divisors (cube):Min_25篩
分析 首先,STO ywy OTZ,ywy TQL%%%! 說一下這道題用min_25篩怎麼做。 容易發現,對於所有質數\(p\),都滿足\(f(p)=4\),於是我們就可以直接通過\([1,x]\)內的質數的個數\(h(x)\)來求出\(g(x)=\sum_{i=1}^{x}f(i) \times [
SP34096 DIVCNTK - Counting Divisors (general) min_25篩
define 包含 dig 完全 main 而且 為我 數組 bps \(\color{#0066ff}{ 題目描述 }\) \(σ_0(i)\) 表示\(i\) 的約數個數 求\(S_k(n)=\sum_{i=1}^n\sigma_0(i^k)\mod 2^{64}\)
[HDU]6069 Counting Divisors
求: (∑i=lrd(ik))mod998244353 l,r,k(1≤l≤r≤1012,r−l≤106,1≤k≤107) 題解: 設n=pc11pc22...pcmmn=p,則d(nk)=
hdu--6069--Counting Divisors
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int mod = 998244353;const int maxn = 1000009;bool Isprime[maxn]; ///素數表1
Hdu 6069 Counting Divisors【素數區間篩+預處理素因子分解】
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 3150 Ac
HDU6069多校第四場 Counting Divisors
10 48 2302題意: 對l~r中的每個數的因子個數求和(最後求餘);思路: 對於每一個數而言可以進行分解質因數 num=p1^k1*p2^k2……pn^kn 的形式,而當前這個數的因子和(可以整除這個數的數)就是(k1+1)*(k2+1)……*(kn+1)個。而現在題中求i^k,分解質因子中將k乘
HDU_6069 Counting Divisors
題目連結 題目意思 給你三個數L,R,K讓你求滿足下面公式的答案 解題思路 由題意我們可以知道L,R最大為1e12,所以我們可以用篩法篩選sqrt(1e12)之內的所有素數。 有數論中的結論我們知道,任何一個正整數x,都可以分解成若干個素數
hdu6069 Counting Divisors
根據約數個數定理:n=p1^a1×p2^a2×p3^a3*…*pk^ak,n的約數的個數就是(a1+1)(a2+1)(a3+1)…(ak+1). 若i=p1^a1×p2^a2×p3^a3*…*pk^ak,則i^K=p1^(a1*K)×p2^(a2*K)×p3^(a3*K)*
SPOJ CZ_PROB1 - Summing to a Square Prime
tags poj ons 算法 ++ pair ont logs 16px 題目鏈接:http://www.spoj.com/problems/CZ_PROB1/ 題目大意:Sp2 是所有素數中能夠被分解為兩個數的平方和的素數的集合。P(a,b)指的是在a的劃分中,最大元素
spoj 4168. Square-free integers(容斥)
求出1~n(n <= 10^14)內不被任意一個完全平方數整除的數的個數。 同樣的,考慮問題的逆問題,就是至少能被一個完全平方數整除的數的個數。所以答案就是 n - ( 1~n內完全平方數
Kickstart Round A 2017 Problem A. Square Counting 公式、數論逆元、除法取模
Problem Mr. Panda has recently fallen in love with a new game called Square Off, in which players compete to find as many different squares as possible on
[SPOJ DQUERY] D-query(樹狀數組,離線)
vector scan con oid n) fin %d ear span 題目鏈接:https://vjudge.net/problem/SPOJ-DQUERY 題意:給定數列,q次詢問,問區間內不同數字的個數。 可以用主席樹,但是還有更好寫的辦法。 離線存下所有的詢問
221. Maximal Square
pub ant www ini rec ont html ref ges Problem statement: Given a 2D binary matrix filled with 0‘s and 1‘s, find the largest square contai
SPOJ SUMPRO(數學)
strong 序列 分析 所有 枚舉 發現 個數 得到 題意 題意: 給出一個數N,問所有滿足n/x=y(此處為整除)的所有x*y的總和是多少。對答案mod(1e9+7)。 1 <= T <= 500。 1 <= N <= 1e9。 分析:
[leetcode-338-Counting Bits]
single binary problem href present gen process Coding [1] Given a non negative integer number num. For every numbers i in the range 0 ≤ i