Codeforces —— 359C Prime Number
很有趣的一個數論題。
題目要求的是分子和分母的最大公約數,但因為x是素數,所以其實就是要將分子和分母都表示成(x^k)*m,m不能被x整除,然後取分子和分母k的最小值。
對於分母,題目已經限定好就是x^s,s=a1+a2+...+an
所以關鍵點就是處理分子那一部分。
首先對於每個1/x^ai,通分後分子的形式就是x^(s-ai),我們的任務就是要求出分子中所有項的最大公約數(就是我們要的x^k),那肯定是取次數最小的那一項了。
但由於其中某些項相加有可能是係數能被x整除,
比如2^2+2^2=2*2^2=2^3,
對於這種情況分子求出來的次數是3而不是2
所以我們還要對分子的項進行處理。
處理的方法是將相同次數的項加到一塊,這裡我用map處理
然後每次取次數最小的t,判斷係數r是否能被x整除,
如果不可以表示這個t就是我們要找的分子的t,
否則就將r中一個x乘到x^t上去,也就是將r/x加到x^(t+1)的係數上去,直到找到一個最小的t並且r%x!=0
這個過程就像那種三個空瓶可以換一瓶新飲料那樣,喝完後新的空瓶加上原來的空瓶再去換。
這樣我們就找到分子和分母的最大次數,取兩者的最小值,再用快速冪就能求出答案了。
#include<cstdio> #include<map> using namespace std; #define MOD 1000000007 #define LL __int64 int n, i; LL a[100000], x, s, t, r; map<LL,LL> MP; map<LL,LL>::iterator it; void solve(){ LL ans=1; while(s>0){ if(s%2==1) ans = (ans*x)%MOD; x = (x*x)%MOD; s/=2; } printf("%I64d\n", ans); } int main(){ while(~scanf("%d %I64d", &n, &x)){ MP.clear(); s=0; for(i=0; i<n; i++){ scanf("%I64d", &a[i]); s+=a[i]; } for(i=0; i<n; i++){ MP[s-a[i]]++; } while(1){ it = MP.begin(); t = it->first; r = it->second; MP.erase(t); if(r%x>0){ if(t<s) s=t; solve(); break; } r/=x; t++; MP[t]+=r; } } return 0; }
相關推薦
Codeforces —— 359C Prime Number
很有趣的一個數論題。 題目要求的是分子和分母的最大公約數,但因為x是素數,所以其實就是要將分子和分母都表示成(x^k)*m,m不能被x整除,然後取分子和分母k的最小值。 對於分母,題目已經限定好就是x^s,s=a1+a2+...+an 所以關鍵點就是處理分子那一部分。 首先
JD 題目1040:Prime Number (篩法求素數)
rime 簡單 set end std tdi href num mod OJ題目:click here~~ 題目分析:輸出第k個素數 貼這麽簡單的題目,目的不清純 用篩法求素數的基本思想是:把從1開始的、某一範圍內的正整數從小到大順序排列
AOJ 0009 Prime Number
ont eve oid std splay 線性時間 red lin adding 題意:給出n,求不大於n的素數有多少個。 算法:先用線性時間復雜度的篩法打素數表,對於每個輸入統計不超過的素數個數。 #include <cstdio> int p[100
[LeetCode] Prime Number of Set Bits in Binary Representation
pri return not prim 統計 all bits clu leet Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a p
762. Prime Number of Set Bits in Binary Representation 二進制表示形式中的素數位數
num number uri auto func href order ger xpl Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having
CodeForces - 805D Minimum number of steps
mini png turn 增加 include blog 裏的 nbsp style 題目大意:把一個串裏的ab改為bba,求最少改幾次就沒有ab了 具體思路:可以把一次操作看成把a放到b右邊,再增加一個b,要求把所有的a都移到b右邊 發現1個a過一個b要1次操作 2
762. Prime Number of Set Bits in Binary Representation二進制中有質數個1的數量
nta 圖片 rime slist 代碼風格 輸出 -s turn 特殊 [抄題]: Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a
Codeforces 980E The Number Games (貪心 + 倍增)
任重而道遠 The nation of Panel holds an annual show called The Number Games, where each district in the nation will be represented by one contestant. T
Leetcode762.Prime Number of Set Bits in Binary Representation二進位制表示中質數個計算置位
給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算
CodeForces - 271B Prime Matrix (素數打表)
You've got an n × m matrix. The matrix consists of integers. In one move, you can apply a single transformation to the matrix: choose an
【CodeForces - 27E】Number With The Given Amount Of Divisors (數論,數學,反素數)
題幹: Given the number n, find the smallest positive integer which has exactly n divisors. It is guaranteed that for the given n
LeetCode-Java-762. Prime Number of Set Bits in Binary Representation
題目 Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a pri
LeetCode-Prime Number of Set Bits in Binary Representation
Description: Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bit
【LeetCode】762. Prime Number of Set Bits in Binary Representation(C++)
題目: Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bits in the
Codeforces 912E Prime Gift 分段列舉+二分
題意:給定包含n個數的素數集合a[] ,定義一個新的集合,其中除一以外的所有的數的因子必須是a集合中的,而且按順序排放;求第k個數;思路:首先給定的a[] 長度是17不大但是沒辦法列舉所有的可能,我們可以想到分段列舉來降低複雜度;將a[] 分成兩段,分別求出所有小於1e18的
LeetCode-762. Prime Number of Set Bits in Binary Representation
Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bits in th
【LeetCode】762. Prime Number of Set Bits in Binary Representation
Prime Number of Set Bits in Binary Representation Problem Example Solution 一堆題放一塊太擠了,還是分開放=.=,也能寫得詳細一點 Problem
[LeetCode] Prime Number of Set Bits in Binary Representation 二進位制表示中的非零位個數為質數
Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bits in their binary representation.
LeetCode 762. 762. Prime Number of Set Bits in Binary Representation
題目連結:二進位制表示中質數個計算置位 - 力扣 (LeetCode) Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime numbe
學以致用——Java原始碼——任意範圍內的素數列印(Prime Number display)
看起來很簡單的一個程式,寫起來咋就這麼費時間呢?或許這就是所謂的知易行難吧。 當上限增加到10萬時(即,輸出10萬以內的所有素數時,方法1用時約為方法2的四分之一)。選擇一個優化的演算法有時很重要! 原始碼: package exercises.ch6Methods; //JHT