void
get_fac
(ll m)
//要找的m的素因子}if
(m>1)
fac[cnt++
]=m;
}
如果乙個數有m的素因子,那麼他就一定不和m互質,比如30的素因子有2,3,5,那麼所有2的倍數就不和30互質,同理3的倍數,5的倍數也不和30互質,這裡假設要求1~30內和30互質的數,那麼r=30.設x1是2在1到30中2的倍數的個數,則x1=15,同理對3,x2=10,對5,x3=6,對23,x4=5 ;對2 * 5,x5=3;對3 * 5,x6=2;對23*5,x7=1,所以和30不互質的數就有x1+x2+x3-(x4+x5+x6)+x7=22個,則與30互質的數就有8個,和30的尤拉函式值相等.
程式寫法:
1.dfs():在遞迴的每一層都決策一下這個數選不選,第幾層就是第幾個數.
void
dfs(
int pos,
int use,
int cur,
int up)
dfs(pos+
1,use+
1,cur*fac[pos]
,up)
;dfs
(pos+
1,use,cur,up);}
//呼叫形式:dfs(0,0,1,r); //(遞迴層數,用了的數的數量,1儲存每一項(即x1或x2..)的值,上限範圍);
2.位運算
ll find
(ll up)
//up表示上限
} res+
=(coun%2)
?up/p:
(-up/p);}
return up-res;
//res為和m不互質的數的個數,那麼up-res就是互質的數的個數
}
容斥原理應用 求1 r中有多少個數與n互素
問題 求1 r中有多少個數與n互素。對於這個問題由容斥原理,我們有3種寫法,其實效率差不多。分別是 dfs,佇列陣列,位運算。先說說位運算吧 用二進位制1,0來表示第幾個素因子是否被用到,如m 3,三個因子是2,3,5,則i 3時二進位制是011,表示第2 3個 因子被用到 ll solve ll ...
1 R語言介紹
注釋 賦值 檢視 設定當前工作目錄 getwd setwd wd workspace directory setwd c myproject project1 在獨立的目錄中儲存專案是個好主意。文字輸出 函式 skin filename 將輸出重定向到檔案 中。不加引數呼叫 skin 僅向圖形輸出。...
1R安裝環境
2進入 的cocoa gui資料夾中,r框架將安裝在 library frameworks中,tcl tk和texinfo將安裝在 usr local 在某些條件下你可以將其自由散布。用 license 或 licence 來看散布的詳細條件。r是個合作計畫,有許多人為之做出了貢獻.用 contri...