問題來自於乙個精彩的故事:
有三個數學家,a,b與c。a選了兩個正整數x與y滿足x<=y。然後,a將x+y的值告訴了b,a又將x*y的值告訴了c。b與c都不知道x與y分別是什麼,也不知道對方得到的值是什麼。但b和c知道a告訴b的值是某兩個正整數的「和」而告訴c的值是這兩個數的「積」。而且這三個數學家的數學功底足夠好。下面是b與c進行的對話:
b:「我確定你一定沒有百分百的把握猜中我得到的數。」
c:「謝謝你的提示。現在我能確定你獲得的數是 s。」
故事結束,回到問題。
這個故事中一共涉及3個未知引數x,y與s,其實由於s=x+y,所以實際一共只有兩個未知引數而已。你可以帶入一些正整數讓這個故事沒有邏輯漏洞。現在問題來了,在區間[l,r]上存在多少個數值t,使s=t時能找到對應的x與y,並讓這個故事成立。輸出這些t的和(1<=l<=r<=5,000,000)。
多組測試資料,第一行乙個整數t,表示資料個數,其中1<=t<=10.
之後有t行,每行兩個數l與r,表示一組詢問,其中1<=l<=r<=5,000,000.
輸出t行,每行乙個整數,即[l,r]區間中所有符合條件的s的和。
3 30 33
8 11
40 43
33 19
0首先,怎麼知道對方無法100%猜中?
考慮對方什麼時候100%猜中。顯然是拿了個質數。
因此和s一定不可以被表示成質數+1,不然對方100%猜中。
b說的那句話也就是告訴了c這樣的資訊「我的數不是質數+1」
那麼為什麼c就猜出來了呢?肯定有唯一解!
假設c拿到的是p, p為合數。
對於1*p=p這組拆分,p+1顯然不是質數+1(p是合數嘛)
唯一解就肯定是1和p,那麼其餘所有解xy=p,都會有x+y-1是質數。
因此知道了p=s-1。
列舉x和y用n log n篩就行了。
#include
#define n 5000010
long
long prime[n / 5];
long
long
sum[n];
bool notprime[n];
void getsum()
}for (int i = 1; i <= n - 10; i++)
sum[i] = i;
for (int i = 2; i <= n - 10; i++)
for (int j = i; j <= (n - 10) / i; j++)
if (notprime[i + j - 1])
sum[i * j + 1] = 0;
for (int i = 1; i <= n - 10; i++)
if (!notprime[i])
sum[i + 1] = 0;
sum[1] = sum[2] = 0;
for (int i = 1; i <= n - 10; i++)
sum[i] += sum[i - 1];
}int main()
}
51nod 1333 無聊的數學家
很有趣的題目。首先,怎麼知道對方無法100 猜中?考慮對方什麼時候100 猜中。顯然是拿了個質數。因此和s一定不可以被表示成質數 1,不然對方100 猜中。b說的那句話也就是告訴了c這樣的資訊 我的數不是質數 1 那麼為什麼c就猜出來了呢?肯定有唯一解!假設c拿到的是p,p為合數。對於1 p p這組...
51Nod 1333 無聊的數學家們
問題來自於乙個精彩的故事 有三個數學家,a,b與c。a選了兩個正整數x與y滿足x y。然後,a將x y的值告訴了b,a又將x y的值告訴了c。b與c都不知道x與y分別是什麼,也不知道對方得到的值是什麼。但b和c知道a告訴b的值是某兩個正整數的 和 而告訴c的值是這兩個數的 積 而且這三個數學家的數學...
數學家劉徽的故事
劉徽 中國數學史上乙個非常偉大的數學家,他的傑作 九章算術注 和 海島算經 是中國最寶貴的數學遺產。他的主要著作有 九章算術注 10卷 重差 1卷,至唐代易名為 海島算經 九章重差圖 l卷。可惜後兩種都在宋代失傳。九章算術 約成書於東漢之初,共有246個問題的解法。在許多方面 如解聯立方程,分數四則...