Fermat's little theorem states that if p is a prime number, then for any integer a, the number (ap – a) is an integer multiple of p. In the notation of modular arithmetic, this is expressed as
ap ≡ a (mod p)
For example, if a = 2 and p = 7, 27 = 128, and 128 − 2 = 7 × 18 is an integer multiple of 7. We can also write 128 % 7 = 2, here % is the modulo operator used in C/C++ or Java. If a is not divisible by p, Fermat's little theorem is equivalent to the statement that ap − 1 − 1 is an integer multiple of p, or in symbols
ap-1 ≡ 1 (mod p)
For example, if a = 2 and p = 7 then 26 = 64 and 64 − 1 = 63 is a multiple of 7. We can also write 64 % 7 = 1. You are given a set S which contains 1 to N. You want to find two subsets of S, X and Y such that the following conditions are met:
X ∩ Y = ∅
Let bitwise XOR of every element of X equals U and Y equals V. U must be less than or equal to V.
You want to find out number of ways you can choose such subset X and Y. Two ways (X1, Y1) and (X2, Y2) will be equal if X1 equals X2 and Y1 equals Y2 or X1 equals Y2 and Y1 equals X2. For example is S = {1, 2}, the ways are:
X = ∅, Y = ∅. [U = 0, V = 0]
X = ∅, Y = {1}. [U = 0, V = 1]
X = ∅, Y = {1,2}. [U = 0, V = 1 ^ 2 = 3, (^ means bit-wise XOR in C/C++/Java)]
X = ∅, Y = {2}. [U = 0, V = 2]
X = {1}, Y = {2}. [U = 1, V = 2]
Now, given N, you need to find the number of ways you can choose two subsets of S such that the 2 conditions meet, modulo 1000000007 (109 + 7).
Input
First line contains T(T≤100), the number of test cases. Each of the next T lines each contains an integer N (0≤N
ทฤษฎีบทเล็กของแฟร์มาแจ้งว่า ถ้า p เป็นจำนวนเฉพาะ สำหรับจำนวนเต็มใด ๆ แล้วเลข (ap – ตัว) เป็นจำนวนเต็มของ p ในสัญลักษณ์ของเลขคณิตมอดุลาร์ นี้จะแสดงเป็นap ≡ (mod p)ตัวอย่าง ถ้าเป็น = 2 และ p = 7, 27 = 128 และ 128 − 2 = 7 × 18 เป็นจำนวนเต็มของ 7 นอกจากนี้เรายังสามารถเขียน 128% 7 = 2 นี่%คือการ modulo ดำเนินการที่ใช้ใน C/c ++หรือ Java ได้ ถ้ายังไม่หารได้จะเท่ากับงบที่ว่า ap − 1 − 1 เป็นจำนวนเต็ม โดย p ทฤษฎีบทเล็กของแฟร์มาหลาย p หรือสัญลักษณ์ap 1 ≡ 1 (mod p)ตัวอย่าง ถ้าเป็น = 2 และ p = 7 แล้ว 26 = 64 และ 64 − 1 = 63 เป็นตัวคูณของ 7 นอกจากนี้เรายังสามารถเขียน 64% 7 = 1 ได้ คุณจะได้รับชุด S ซึ่งประกอบด้วย 1 N. คุณต้องการค้นหาชุดย่อยสอง S, X และ Y ที่เป็นไปตามเงื่อนไขต่อไปนี้: X ∩ Y =∅ ให้ bitwise XOR ของทุกองค์ประกอบของ X เท่ากับคุณ และ Y เท่ากับ V. U ต้องน้อยกว่า หรือเท่ากับ Vคุณต้องการหาจำนวนวิธีที่คุณสามารถเลือกชุดย่อยเช่น X และ Y วิธีสอง (X 1, Y1) และ (x2, Y2) จะเท่ากับ X 1 เท่ากับ X 2 Y2 เท่ากับ Y1 หรือ Y2 เท่ากับ X 1 และ X 2 เท่ากับ Y1 ตัวอย่าง คือ S = {1, 2 }, วิธีคือ: X =∅ Y =∅. [U = 0, V = 0] X = ∅, Y = {1}. [U = 0, V = 1] X =∅ Y = { 1, 2 } [U = 0, V = 1 ^ 2 = 3, (^ หมายถึง bit-wise XOR ใน C / C + + /mts Java)] X = ∅, Y = {2}. [U = 0, V = 2] X = { 1 } Y = { 2 } [U = 1, V = 2]ตอนนี้ ให้ N ที่คุณต้องการค้นหาจำนวนวิธีที่คุณสามารถเลือกชุดย่อยที่สองของ S ที่เงื่อนไข 2 ตรงกับ modulo 1000000007 (109 + 7)ป้อนข้อมูลบรรทัดแรกประกอบด้วย T(T≤100) หมายเลขของกรณีทดสอบ บรรทัดแต่ละบรรทัดถัดไปทีละประกอบด้วยจำนวนเต็ม N (0≤N < 1010000)ผลผลิตสำหรับแต่ละกรณีพิมพ์หนึ่งบรรทัด "กรณี c: W" หมายเลขกรณี C และ W เป็นคำตอบที่ต้องการ
การแปล กรุณารอสักครู่..
ทฤษฎีบทเล็ก ๆ น้อย ๆ ของแฟร์มาต์ระบุว่าหากพีเป็นจำนวนเฉพาะแล้วสำหรับจำนวนเต็มใด ๆ จำนวน (AP - ก) เป็นจำนวนเต็มของพี ในสัญกรณ์ของเลขคณิตแบบแยกส่วนนี้จะแสดงเป็นAP ≡ (ที่ mod P) ตัวอย่างเช่นถ้า = 2 และ p = 7, 27 = 128 และ 128-2 = 7 × 18 เป็นจำนวนเต็มของ 7 ที่เรา ยังสามารถเขียน 128% 7 = 2% นี่คือผู้ประกอบการโมดูโลที่ใช้ใน C / C ++ หรือ Java ถ้าไม่หารด้วยพีทฤษฎีบทเล็ก ๆ น้อย ๆ ของแฟร์มาต์เทียบเท่ากับคำว่า AP - 1 - 1 เป็นจำนวนเต็มของพีหรือในสัญลักษณ์AP-1 ≡ 1 (สมัย p) ตัวอย่างเช่นถ้า = 2 และพี = 7 แล้ว 26 = 64 และ 64-1 = 63 เป็นหลาย 7. นอกจากนี้เรายังสามารถเขียน 64% 7 = 1 คุณจะได้รับชุด S ซึ่งประกอบด้วย 1 เอ็นคุณต้องการที่จะพบสองส่วนย่อยของ S, X และ y ดังกล่าวว่าเงื่อนไขต่อไปนี้: X Y = ∩∅ให้แฮคเกอร์บิตขององค์ประกอบของX ทุกเท่ากับ U และ y เท่ากับวียูจะต้องน้อยกว่าหรือเท่ากับโวลต์ที่คุณต้องการที่จะหาจำนวนวิธีที่คุณสามารถเลือก X ย่อยดังกล่าวและวายสองวิธี (X1, Y1) และ (X2, Y2) จะเท่ากับถ้า X1 และ X2 เท่ากับ Y1 Y2 เท่ากับหรือเท่ากับ X1 Y1 Y2 และเท่ากับ X2 ตัวอย่างคือ S = {1, 2} วิธีคือ: X = ∅, y = ∅ [U = 0, V = 0] X = ∅, y = {1} [U = 0, V = 1] x = ∅, y = {1,2} [U = 0, V = 1 ^ 2 = 3 (^ หมายถึงบิตที่ชาญฉลาดแฮคเกอร์ใน C / C ++ / Java)] x = ∅, y = {2} [U = 0, V = 2] X = {1}, y = {2} [U = 1, V = 2] ขณะนี้ได้รับ N, คุณต้องไปหาหลายวิธีที่คุณสามารถเลือกได้สองส่วนย่อยของ S ดังกล่าวว่าแอร์ 2 พบโมดูโล 1000000007 (109 + 7). ป้อนข้อมูลบรรทัดแรกมี T ( T≤100) จำนวนกรณีทดสอบ แต่ละสาย T ต่อไปแต่ละที่มีจำนวนเต็ม N (0≤N <1010000). เอาท์พุทสำหรับการพิมพ์แต่ละกรณีหนึ่งบรรทัด "กรณี C: W" ที่ C เป็นจำนวนคดีและ W เป็นคำตอบที่จำเป็นสำหรับกรณีที่ .
การแปล กรุณารอสักครู่..
ทฤษฎีบทเล็กของแฟร์มาต์ ระบุว่า ถ้า p เป็นจำนวนเฉพาะแล้วสำหรับจำนวนเต็ม , ตัวเลข ( AP ) ) เป็นจำนวนเต็มหลายหน้าในสัญกรณ์คณิตศาสตร์ของโมดูลนี้จะแสดงเป็น
AP ≡ ( mod p )
ตัวอย่างเช่นถ้า = 2 และ P = 7 , 27 = 128 , 128 − 2 = 7 × 18 เป็นจำนวนเต็มแบบ 7 นอกจากนี้เรายังสามารถเขียน 128 % 7 = 2 , ที่นี่ % เป็นโมดูโล่ผู้ประกอบการใช้ใน C / C หรือ Javaถ้าไม่แบ่ง P ทฤษฎีบทเล็กของแฟร์มาต์จะเท่ากับงบที่ AP 1 −− 1 เป็นจำนวนเต็มหลาย P , หรือ สัญลักษณ์
ap-1 ≡ 1 ( mod p )
ตัวอย่างเช่นถ้า = 2 และ P = 7 แล้ว 26 = 64 และ 64 − 1 = 63 มีหลายของ 7 นอกจากนี้เรายังสามารถเขียน 64 7 = 1 คุณจะได้รับชุดซึ่งประกอบด้วย 1 . คุณต้องการค้นหาสองส่วนย่อยของวินาทีX และ Y ที่เงื่อนไขต่อไปนี้ได้ :
x ∩ Y = ∅
ให้ XOR บิตของทุกองค์ประกอบของ x เท่ากับ U Y มีค่าเท่ากับ V . u ต้องน้อยกว่าหรือเท่ากับ V .
คุณต้องการหาจำนวนของวิธีที่คุณสามารถเลือกย่อย X กับ Y ( x1 สองวิธี y1 ) , และ ( x2 , y2 ) จะเท่ากับว่า X1 X2 y1 y2 และเท่ากับเท่ากับเท่ากับเท่ากับหรือ X1 และ X2 y1 y2 . ตัวอย่างคือ S = { 1 , 2 } :
วิธี
การแปล กรุณารอสักครู่..