小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為
n的正整數序列a1
,a2,
...,
an,要求小t丟擲
m個問題以訓練他的口算能力。
每個問題給出三個正整數l,
r,d,小q需要通過口算快速判斷al
×al+
1×..
.×ar
−1×a
r是不是
d的倍數。
小q迅速地回答了出來,但是小t並不知道正確答案是什麼,請寫乙個程式幫助小t計算這些問題的正確答案。
input 第一行包含乙個正整數 t(
1≤t≤
10),表示測試資料的組數。
每組資料第一行包含兩個正整數 n,
m(1≤
n,m≤
100000
),分別表示序列長度以及問題個數。
第二行包含
n個正整數 a1
,a2,
...,
an(1
≤ai≤
100000
),表示序列中的每個數。
接下來m行,每行三個正整數 l,
r,d(
1≤l≤
r≤n,
1≤d≤
100000
),表示每個問題。 output 對於每個問題輸出一行,若是倍數,輸出yes,否則輸出no。 sample input
1sample output5 46 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
yesnono
yes
思路:如果直接從l到r進行取餘計算會超時。
為了防止爆空間使用動態陣列vectormaze[i]進行儲存,其中動態陣列的下標表示質因子,
陣列中儲存的數表示,a1~an之間具有這個質因子的下標。然後二分從d分解出來的素數在
該區間內出現總次數是否大於它在d中的次數。
**實現如下:
#include#include#include#includeusing namespace std;
vectormaze[100010];
int panduan(int l, int r, int x) //不懂這個原理,結果就是l~r之間每個數因子是x的總個數
int panduan1(int l,int r,int x)
if(countt>panduan(l,r,i))
return 0;}}
if(x>1)
return 1;
}int main()
//必須對動態陣列進行清零處理,不然wa
for(i=1;i<=n;i++)}}
if(x>1)
maze[x].push_back(i); //最後剩餘的素數不要忘記
}while(m--)
}return 0;
}
乙個不知道是誰的經驗
下面是我當年學習.net的過程,和大家分享一下.1.決定使用c 進行.net的開發.2.費勁千辛萬苦,終於安裝上了vs2003 3.照著圖書館借來的書,完成了第乙個console程式 hello world 4.照著一本把asp.net當asp教的書,完成了一些簡單的頁面 5.照著一本介紹 資料庫操...
Vue 元件你不知道的乙個細節
在h5的table中,什麼元素可以出現在其內部是嚴格定義的,比如我們想要中有,中有.而不是中有個其他不該屬於的標籤,比如自己定義乙個元件,裡面模板還是.這樣會失敗!我們來看看最先會遇到什麼問題,如下 執行結果 這個可不是我們想要的,儘管能夠顯示結果,但是我的row元件明明寫在裡面,為什麼出現在了外面...
他從不知道我需要乙個擁抱
他從不知道我需要乙個擁抱 我知道我並不完美,我犯了一些錯,傷害了一些人,但是當我說 對不起 的時候,我是認真的 他從不知道我需要乙個擁抱!我最怕在我想要放棄的時候你又對我微笑 我最怕在我想要放棄的時候你又對我微笑 我好羨慕她 連她說謊的方式你都愛 經歷告訴你太過在乎就是失去的開始 不要因為沒有掌聲而...