餘數求和(CQOI2007)
這是一道老題,但是作為一道省選題,它的程式碼卻短小精悍,可以觀賞。
我們只需要進行數學推導即可解決。(60分暴力分應該是可以秒拿的)
由題意得:
ans=i=1∑nk%i
首先我們需要知道
a%b 可以表示為
a−b∗⌊ba⌋這個應該是在程式碼中經常用到的
所以
ans=i=1∑nk−i∗⌊ik⌋=n∗k−i=1∑ni∗⌊ik⌋
然後
⌊ik⌋ 可以分塊來做,
⌊ik⌋大約有
k
種取值,所以時間複雜度
O(k
)
所以程式碼如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,k;
int main(){
scanf("%lld%lld",&n,&k);
long long ans=n*k;
for(long long l=1,r;l<=n;l=r+1) {
if(k/l!=0) r=min(k/(k/l),n);
else r=n;
ans-=(k/l)*(r-l+1)*(l+r)/2;
}
printf("%lld",ans);
return 0;
}
相關推薦
餘數求和(CQOI2007)
餘數求和 這是一道老題,但是作為一道省選題,它的程式碼卻短小精悍,可以觀賞。 我們只需要進行數學推導即可解決。(60分暴力分應該是可以秒拿的) 由題意得: a
HDU——1166(敵兵佈陣 )單點更新,區間求和(java)
C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生
P1874 快速求和(DFS)
題目描述 給定一個數字字串,用最小次數的加法讓字串等於一個給定的目標數字。每次加法就是在字串的某個位置插入一個加號。在裡面要的所有加號都插入後,就像做普通加法那樣來求值。 例如,考慮字串“12”,做0次加法,我們得到數字12。如果插入1個加號,我們得到3,因此,這個例子中
我自定義公共類之資料庫指定列求和(10)
//指定資料庫列求和 public string zhidinglieqiuhe(string sql) { SqlConnection conn = DB.lianjie(); conn.Open();
LeetCode 67. 二進位制求和(C++)
給定兩個二進位制字串,返回他們的和(用二進位制表示)。 輸入為非空字串且只包含數字 1 和 0。 示例 1: 輸入: a = "11", b = "1" 輸出: "100" 示例 2: 輸入: a = "1010", b = "1011" 輸出: "10101"
uoj#269. 【清華集訓2016】如何優雅地求和(FFT)
傳送門 題解: 把fff二項式變換一下就行了,變換可以用二項式反演。 #include <bits/stdc++.h> using namespace std; const int RLEN=1<<18|1; inline char n
線段樹模板-單點更新 區間求和(nefuoj1472)
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long ll; #define maxn 10000
【Bzoj4555】【Luogu P4091】求和(NTT)
therefore urn num algo -m 2.7 mat sum http 題面 Bzoj Luogu 題解 先來頹柿子 $$ \sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj! \\ =\sum_{j=0}^n2^jj!\sum_{
藍橋杯 演算法提高VIP 素數求和(java)
2注意判斷素數時:n的因數除了根號n,其他都是成對存在的,且必定一個大於根號n一個小於根號n,如果n不是質數,那麼它的因數一定有一個大於根號n一個小於根號n,所以判斷一個數是不是質數的時候只需要判斷從2到根號n即可。i<=根號n即i*i<=n。1*30=30,2*15=30,3*10=30,5*6
二進位制求和(LintCode)
題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-binary/ 題目: 給定兩個二進位制字串,返回他們的和(用二進位制
uoj#269. 【清華集訓2016】如何優雅地求和(數論)
傳送門 首先,如果\(f(x)=1\),那麼根據二項式定理,有\(Q(f,n,k)=1\) 當\(f(x)=x\)的時候,有\[Q=\sum_{i=0}^ni\times \frac{n!}{i!(n-i)!}k^i(1-k)^{n-i}\] \[Q=\sum_{i=0}^nnk\times \frac{
連結串列求和(LintCode)
題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-two-numbers/ 題目: 你有兩個用連結串列代表的整數,其中每
Linq 分組(group by)求和(sum)並且按照分隔符(join)分割列資料
var query = from c in t.AsEnumerable() group c by new { pingming = c.Field<string>("品名"),
hdu 2015 偶數求和(java)
問題: 參考了他人微博對於分段計算的處理方式,個人覺得比較好。 發現另外一種處理尾數不空格比較便利的方法。 偶數求和 Time Limit: 2000/1000 MS (Java/Others)
leetcode--二進位制求和(AddBinary)--java
package leetcode; /* Given two binary strings, return their sum (also a binary string). * For example, * a = "11" * b = "1" *
用js實現自動求和(積)功能
<body> <form>form1"> <input> <input type="text" name="text2"> <input> <input type="text" name="text4"
zcmu-4954: 矩陣對角求和(水)
Time Limit: 1 Sec Memory Limit: 32 MB Submit: 11 Solved: 5 [Submit][Status][Web Board] Descript
noip2002 級數求和(模擬)
問題描述 已知:Sn= 1+1/2+1/3+…+1/n。顯然對於任意一個整數K,當n足夠大的時候,Sn大於K。 現給出一個整數 K,要求計算出一個最小的n;使得Sn>K。 輸入格式 一個整數,表示整數 k 輸出格式 一個整數,表示最小的n 樣例輸入 1 樣例輸出 2 資
子數組最大求和(續)
++ print 不知道 輸出最大值 xxx pub try length 沒有 這次實驗的主要設計思路和上次的大框差不多,只是不同的地方就是從文件獲取大量的數據和對大型數據的處理,我主要是將文件中的內容讀取成了double型,進而使其能處理比較大的數據,但要是想讓其處
(數論優化分塊)P2261 [CQOI2007]餘數求和
https://www.luogu.org/problemnew/show/P2261 給出正整數n和k,計算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的餘數。例如G(10, 5)=5 mod 1 +