數論神題——進擊的羊角獸

數論神題

進擊的羊角獸

題目描述:

求滿足 \(a+b|ab(a,b \leq n,a \neq b)\)的有序數對\((a,b)\)的個數。

solution

\((a,b)=d , (a < b \leq n)\),則$ a=xd , b=yd , ( x < y )$

\(a+b|ab\)

\(=(x+y)d|xyd^2\)

\(\because (x+y, x)=1,(x+y, y)=1\)

\(\therefore (x+y)|d\)

$\therefore x < y \leq \sqrt{n} $

\(d=z(x+y)\),則\(a=xz(x+y) , b=yz(x+y)\)

即原問題為求數對\((x, y, z)( x < y \leq \sqrt{n}, z \leq \lfloor \frac {n}{y(x+y)} \rfloor)\)

\[Ans=\sum_{x < y} \sum_{(x, y)=1} \lfloor \frac {n}{y(x+y)} \rfloor\]

\[=\sum_{x < y} \sum_{d=(x, y)}\varepsilon(d) \lfloor \frac {n}{y(x+y)} \rfloor\]

\[=\sum_{x < y} \sum_{d|(x,y)} \mu(d) \lfloor \frac {n}{y(x+y)} \rfloor\]

\[=\sum_{x < y,d|x,d|y} \mu(d) \lfloor \frac {n}{y(x+y)} \rfloor\]

\(x=x'd, y=y'd\)

\[=\sum_{x' < y'} \mu(d) \lfloor \frac {n}{y'(x'+y')d^2} \rfloor\]

為了方便,下面的\(x',y' \text 用回 x,y \text 表示\)

\[=\sum_{x < y} \mu(d) \lfloor \frac {n}{y(x+y)d^2} \rfloor (d \leq \sqrt{n})\]

現在就來解釋一下上面的\(\varepsilon(), \mu()\)

這個是莫比烏斯函數的性質。
282059236301495.png

這樣只有當\((x,y)=1\)時,\(\lfloor \frac {n}{y(x+y)} \rfloor\) 才會被算進去。

\(\mu(n)\)很容易就可以算出來,顯然當\(n=1\)\(\mu(1)=1\),對于一個數\(n\),它的所有約數的\(\mu()\)的和為\(0\),而\(n\)的其中一個約數就是\(n\),小于\(n\)\(\mu()\)又已經算出來了,就可以把\(\mu(n)\)算出來。

\[\sum_{x < y} \mu(d) \lfloor \frac {n}{y(x+y)d^2} \rfloor (d \leq \sqrt{n})\]

\[f(t)=\sum_{x < y} \lfloor \frac {t}{y(x+y)} \rfloor\]

\[Ans=\sum_{x < y} \mu(d)f(\frac {n}{d^2})\]

\[f(t)=\sum_{x < y} \lfloor \frac {t}{y(x+y)} \rfloor\]

\[=\sum_{x < y, z \leq \lfloor \frac {t}{y(x+y)} \rfloor} 1\]

\[=\sum_{x \leq y-1, y(x+y) \leq \lfloor \frac {t}{z} \rfloor} 1\]

\[=\sum_{x \leq y-1, x \leq \lfloor \frac {t}{zy} \rfloor -y} 1\]

282105474748895.png
\[f(t)=\sum h(\lfloor \frac {t}{z} \rfloor)\]

終于都推完了。

答案記得乘2

分析一下時間復雜度。

\(h(s)\):因為最小值要比大于\(0\),所以\(y \leq \sqrt {s}\),而\(s=\lfloor \frac {t}{z} \rfloor=\lfloor \frac {n}{zd^2} \rfloor\),所以\(s\)最多有\(2\sqrt {n}\)個,時間復雜度為:

\[\int_{0}^{\sqrt {n}} (\sqrt {x} + \sqrt { \frac {n}{x}} ) \mathrm{d}x\]

\(f(s)\):分析同上,一個\(f(s)\)需要\(\sqrt {s}\)的時間

\(Ans\):枚舉\(d\)\(\sqrt {n}\),算\(f(s)\)需要\(\sqrt {s}\)的時間,總的時間復雜度為:

\[\int_{0}^{\sqrt {n}} (\sqrt {x} + \sqrt { \frac {n}{x}} ) \mathrm{d}x\]

預處理\(h(s)\),所以整個算法的時間為:

\[\int_{0}^{\sqrt {n}} (\sqrt {x} + \sqrt { \frac {n}{x}} ) \mathrm{d}x\]

\[=\frac {8}{3} n^{ \frac {3}{4}}\]

貼代碼:

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <map>
#include <deque>
#include <queue>
using namespace std;typedef long long LL;
const int maxn=int(1e6)+100;LL n, ans;
int qn;
LL u[maxn], h[maxn], hv[maxn];void getu()
{for (int i=1; i<=qn; ++i) u[i]=1;for (int i=2; i<=qn; ++i){u[i]=-u[i];for (int j=2; i*j<=qn; ++j) u[i*j]+=u[i];}
}
LL geth1(LL num)
{int cut=(sqrt(1+8*num)+1)*0.25;int fi=(int)floor(sqrt(num));LL ret=LL(cut-1)*cut/2-(LL)(cut+1+fi)*(fi-cut)/2;for (int i=cut+1; i<=fi; ++i)ret+=num/i;return ret;
}
void geth()
{for (int i=1; i<=qn; ++i){h[i]=geth1(i);hv[i]=geth1(n/i);           }
}
LL getf(LL num)
{LL f=0;int fi=(int)floor(sqrt(num));for (int i=1; i<=fi; ++i)f+=h[i]*(num/i-num/(i+1));for (int i=1; i<=fi; ++i){if (num / i <= fi) continue;if (num/i>sqrt(n)) f+=hv[n/(num/i)];else f+=h[num/i];}/*if (LL(sqrt(num))*LL(sqrt(num))==num)f-=h[LL(sqrt(num))];*/return f;
}
void solve()
{getu();geth();for (int i=1; i<=qn; ++i)ans+=u[i]*getf(n/((long long)i*i));
}
int main()
{freopen("nixgnoygnay.in", "r", stdin);freopen("nixgnoygnay.out", "w", stdout);scanf("%I64d", &n);qn=(int)floor(sqrt(n));solve();printf("%I64d\n", ans*2);return 0;
}

轉載于:https://www.cnblogs.com/GerynOhenz/p/4464017.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

靶場練習第一天~vulnhub靶場之Me-and-My-Girlfriend-1

兄弟們第一天打vulnhub靶場&#xff0c;我kali連靶場ip都掃不到&#xff0c;淚奔了&#xff0c;不說了開整 注意&#xff1a; vm虛擬機里面的編輯下面的虛擬機網絡編輯器&#xff0c;把除了NAT模式外的模式&#xff0c;其他模式不啟動。 至于為什么要這樣操作&#xff0c;感覺…

ubuntu的網絡配置

1&#xff0c;檢查網絡是否通暢 ping www.baidu.com 2&#xff0c;檢查網線是否插好 3&#xff0c;使用ifconfig查看當前活躍網絡接口 ifconfig 4&#xff0c;配置IP地址、子網掩碼、網關地址 sudo vi /etc/network/interfaces 確保此文件中有以下信息&#xff1a;&#xff08;…

pstree 命令詳解

作用&#xff1a; 以命令樹狀圖的方式展現進程之間的派生關系&#xff0c; 顯示效果比較直觀。 選項&#xff1a;-a 顯示每個程序的完整指令&#xff0c; 包含路徑&#xff0c; 參數或者是常駐服務的標志-c 不使用精簡標示法-h 列出樹狀圖&#xff0c;特別標明現在執行的程序-l…

ubuntu 開發板ping通虛擬機掛載nfs服務器

先.nfs服務配置1.設置開發板ip &#xff0c;同一網段2.開發板上操作&#xff1a;ifconfig eth0 192.168.1.203.測試是否能夠ping通&#xff1a;ping 192.168.1.194.測試開發板ip是否被占用&#xff1a; 在主機上&#xff1a;sudo ifconfig eth0 down,看開發板上的ip是否斷開。重…

靶場練習第二天~vulnhub靶場之 THE PLANETS: EARTH

前期準備&#xff1a; 靶機下載鏈接: https://pan.baidu.com/s/1_w8OZOPVsQaojq2rnKcdRA 提取碼: gguw kali攻擊機ip&#xff1a;192.168.101.10 靶機地址&#xff1a;192.168.101.101 一、信息收集 1.nmap掃描 因為kali與靶機在同一個網段下&#xff0c;使用nmap 192.168…

測試與封裝5.1

我的隊友是52吳舒婷&#xff0c;博客內容主要是白盒黑盒的測試數據分析 我們通過簡單的四則運算來進行程序的測試與封裝 我們主要完成的是事情 &#xff08;1&#xff09;封裝&#xff1a;將運算要運用的方法進行封裝 文件主要有三個&#xff1a;Calculate&#xff08;存放運算…

springmvc學習筆記--mybatis--使用插件自動生成實體和mapper

由于表對象在開發過程中會增刪字段&#xff0c;有時候需要重新生成實體和對應的mapper&#xff0c;這時候可以通過mybatis的插件的生成。 優點是快速簡潔&#xff0c;缺點同樣很明顯&#xff1a;覆蓋。因此&#xff0c;通常是在第一次搭建框架的時候使用&#xff0c;因為開發過…

靶場練習第三天~vulnhub靶場之narak

靶機下載鏈接: https://pan.baidu.com/s/1GxcSL6efwd0GcbY45WsD0A 提取碼: dhr5 一、信息收集 1.使用namp 192.168.101.0/24掃描該網段的地址&#xff0c;尋找靶機IP 2.直接訪問192.168.101.102 3.進行目錄掃描&#xff0c;dirb目錄掃描工具&#xff08;kali自帶的&#xff…

hdu 1754 塊狀鏈表 單點修改+單點查詢

經典的線段樹題目&#xff0c;也可以用塊狀鏈表做。 1 #include <iostream>2 #include <cstring>3 #include <cstdio>4 #include <cmath>5 using namespace std;6 7 const int N 200000;8 const int M 800;9 int n, m, tot;10 11 int max( int a, in…

靶場練習第四天~vulnhub靶場之Lazysysadmin

靶機下載鏈接: https://pan.baidu.com/s/1MMkgaYLRc78YX4s6nvqdjQ 提取碼: djpm 信息收集 查看kali的IP 使用nmap 192.168.101.0/24 探測靶機IP 發現開放445端口&#xff0c;并且開放的服務microsoft-ds。可以用enum4linux工具來掃描共享文件&#xff0c;使用方法: enum4linux…

關于代碼手寫UI,xib和StoryBoard

代碼手寫UI 這種方法經常被學院派的極客或者依賴多人合作的大型項目大規模使用。Geek們喜歡用代碼構建UI&#xff0c;是因為代碼是鍵盤敲出來的&#xff0c;這樣可以做到不開IB&#xff0c;手不離開鍵盤就完成工作&#xff0c;可以專注于編碼環境&#xff0c;看起來很cool很高效…

ODAC(V9.5.15) 學習筆記(十)TVirtualTable

名稱 類型 說明 Options TVirtualTableOptions 選擇項&#xff0c;包括&#xff1a; voPersistentData&#xff1a;在數據集關閉時不處理其相關數據內容 voStored&#xff1a;設計期對數據集的處理以及錄入的數據將保存在DFM文件中 AddField 增加一個字段&#xff0c…

SQLSERVER如何獲取一個數據庫中的所有表的名稱、一個表中所有字段的名稱

1.查詢數據庫中的所有數據庫名&#xff1a; 1 SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查詢某個數據庫中所有的表名&#xff1a; 1 SELECT Name FROM SysObjects Where XTypeU ORDER BY Name 3.查詢表結構信息&#xff1a; 1 SELECT (case when a.colorder1 …

靶場練習第五天~vulnhub靶場之basic_pentesting_1

一、信息收集 1.主機發現 靶機下載鏈接: https://pan.baidu.com/s/143q3cbZG6-8y8kMk51Lc_Q 提取碼: i8hv &#xff08;1&#xff09;Netdiscover&#xff1a;專用的二層發現工具&#xff0c;擁有主動和被動發現兩種方式 具體操作如下&#xff0c;查看一下kali的ip 然后使用…

計算機網絡學習筆記(二) 計算機網絡結構

什么是網絡結構&#xff1f; n 網絡邊緣: 主機網絡應用 n 接入網絡&#xff0c;物理介質:有線或無線通信鏈路 n 網絡核心&#xff08; 核心網絡&#xff09; :互聯的路由器&#xff08;或分組轉發設備&#xff09;網絡之網…

Javascript常用的設計模式詳解

Javascript常用的設計模式詳解 閱讀目錄 一&#xff1a;理解工廠模式二&#xff1a;理解單體模式三&#xff1a;理解模塊模式四&#xff1a;理解代理模式五&#xff1a;理解職責鏈模式六&#xff1a;命令模式的理解&#xff1a;七&#xff1a;模板方法模式八&#xff1a;理解ja…

靶場練習第六天~vulnhub靶場之Lampiao

靶機下載鏈接: https://pan.baidu.com/s/1h0uiwvBkX8iXFyMAO23e1A 提取碼: 2kjp 一、信息收集 1.靶機發現 &#xff08;1&#xff09;靶機lampiao與kali均為NAT模式 ,Kali的 IP為192.168.101.10, 掃描網段用命令nmap -sp192.168.101.0/24&#xff0c;發現靶機ip為192.168.10…

生成百度地圖 如何弄

http://api.map.baidu.com/lbsapi/creatmap/index.html轉載于:https://www.cnblogs.com/qinqiu/p/4476747.html

內存泄露從入門到精通三部曲之排查方法篇

最原始的內存泄露測試 重復多次操作關鍵的可疑的路徑&#xff0c;從內存監控工具中觀察內存曲線&#xff0c;是否存在不斷上升的趨勢且不會在程序返回時明顯回落。這種方式可以發現最基本&#xff0c;也是最明顯的內存泄露問題&#xff0c;對用戶價值最大&#xff0c;操作難度小…

靶場練習第七天~vulnhub靶場之mrRobot

靶機下載鏈接: 百度網盤 請輸入提取碼 提取碼: sqv3 一、主機發現 1.用ifconfig查看kali的ip&#xff0c;因為kali和靶機都開啟了NAT模式&#xff0c;使用namp -sP 192.168.101.0/24探測靶機ip 二、信息收集 1.使用nmap掃描靶機 使用nmap -A 192.168.101.108 &#xff0c;查…