微商城建設(shè)購物網(wǎng)站百度首頁純凈版
大家好😃,我是想要慢慢變得優(yōu)秀的向陽🌞同學(xué)👨?💻,斷更了整整一年,又開始恢復(fù)CSDN更新,從今天開始更新備戰(zhàn)藍(lán)橋30天系列,一共30天,如果對你有幫助或者正在備戰(zhàn)藍(lán)橋杯的小伙伴可以支持一下哦!~不能說肯定是干貨,但會(huì)讓你有所收獲!💓💓💓
🍭🍭我們總是在生活扮演各種角色,卻唯獨(dú)很少扮演自己🍭🍭
奇數(shù)倍數(shù) - 藍(lán)橋云課 (lanqiao.cn)
思路:純暴力模擬就行,填空題只要答案沒什么好說的
public static void main(String[] args) {for (int i = 2; ; i++) {if (check(i * 2019)) {System.out.println(i * 2019);break;}}}public static boolean check(int n) {while (n != 0) {int tmp = n % 10;if (tmp % 2 == 0) return false;n /= 10;}return true;}
求值 - 藍(lán)橋云課 (lanqiao.cn)
思路①:純暴力模擬,因?yàn)閿?shù)比較小,加上是一道填空題,考場遇到用的方法越簡單越好
思路②:約數(shù)個(gè)數(shù)定理+唯一整數(shù)分解定理,一道數(shù)論題,相當(dāng)于,已知約數(shù)個(gè)數(shù),求對應(yīng)的最小的自然數(shù)
思路①
//這段代碼在idea跑著也挺費(fèi)勁的,3秒左右出答案,但放在oj平臺(tái)上肯定超時(shí),我們只用System.out.println(45360);提交就行了
public static void main(String[] args) {for (int i = 1; ; i++) {int count = 0;for (int j = 1; j <= i; j++) {if(i % j == 0) count++;if (count == 100) {System.out.println(i);//45360return;}}}}
思路②

這道題本質(zhì)其實(shí)是約數(shù)個(gè)數(shù)定理的逆用

這個(gè)是百度定義的還有例題
例題:正整數(shù)378000共有多少個(gè)正約數(shù)?
解:將378000分解質(zhì)因數(shù)378000=2^4×3^3×5^3×7^1//根據(jù)唯一整數(shù)分解定理我們知道任何一個(gè)整數(shù)都能拆成一堆質(zhì)數(shù)的冪相乘,這里的質(zhì)是2357
由約數(shù)個(gè)數(shù)定理可知378000共有正約數(shù)(4+1)×(3+1)×(3+1)×(1+1)=160個(gè)。//又根據(jù)約數(shù)個(gè)數(shù)定理,一個(gè)數(shù)的所有質(zhì)因數(shù)數(shù)的冪+1之和相乘是這個(gè)數(shù)所有約數(shù)的之和
已知約數(shù)個(gè)數(shù)是100,100是根據(jù)約數(shù)個(gè)數(shù)定理,是正整數(shù)t(t是題目讓我們求的值)的所有素因子的冪+1的和相乘得到的,那我們逆向思考可以得到,把10根據(jù)整數(shù)唯一分級定理拆成100=2*2*5*5,又因?yàn)榍笞钚?#xff0c;把最小質(zhì)數(shù)按順序找到四個(gè),分別是2345,把最大的冪給最小的質(zhì)數(shù)(記得-1),答案就是2^(5-1)*3^(5-1)*5^(2-1)*7^(2-1),得到最小的自然數(shù)
求和 - 藍(lán)橋云課 (lanqiao.cn)
思路:前綴和,看S的表達(dá)式,會(huì)發(fā)現(xiàn)如果提取一個(gè)公因數(shù)那么S=a1*(a2+a3..an)+a2*(a3+..an)...這樣思路一下子就清晰起來了,括號里面的數(shù)據(jù)就是在暗示我們用前綴和
//因?yàn)檫@道題輸入數(shù)據(jù)達(dá)到200000,藍(lán)橋比賽是IO賽制的比賽,提交根本不知道對不對,可能有數(shù)據(jù)太大超時(shí)了,為了穩(wěn)妥
//避免這種情況可能的發(fā)生,我們這里使用了快讀,雖然說正常的輸入輸出也能過,但如果真正的比賽你是不清楚的,穩(wěn)一點(diǎn)總是好的
public static void main(String[] args) throws IOException {long ans = 0;BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] s = br.readLine().split(" ");int n = Integer.parseInt(s[0]);s = br.readLine().split(" ");for (int i = 1; i <= n; i++) {a[i] = Integer.parseInt(s[i - 1]);}for (int i = 1; i <= n; i++) {a[i] += a[i - 1];}for (int i = 1; i <= n; i++) {//這里寫的有點(diǎn)復(fù)雜其實(shí)就是a[1]*(a[2]+a[3]..a[n])因?yàn)槭乔熬Y和數(shù)組,a[1]表達(dá)起來有點(diǎn)費(fèi)勁//當(dāng)然這道題甚至可以不用專門再寫個(gè)前綴和循環(huán)了,因?yàn)槭菑念^到尾遍歷了,直接用一個(gè)sum變量來接受更加簡單//long sum = 0;//for (int i = 0; i < n; i++) {//ans+=a[i]*sum;//sum+=a[i];//}ans += (long) (a[i] - a[i - 1]) * (a[n] - a[i]);}System.out.println(ans);}