[TIOJ][1615] A! + B! problem
前言
好久沒有寫 code 發題解了 最近因為一些事情沒有時間(也沒有心情)認真寫 code (因為上次 CodeForces 連續掉分我心情有點糟) (啊還有學科校內爆炸也是我心情糟的原因之一) (開始懷疑我到底這一年努力是為了什麼,之類的)
然後今天想說寫個題目、發個題解刷一下存在感,之類的 所以跑去 TIOJ 翻題目 然後看到這題 。。。寫完 AC 了之後發現很裸,裸到有點不知道該說什麼
題目 & 解法
大意上是說,給定兩數字 ,求 共有多少個質因數 原網址我放在這
很直觀的會拆成 來做 所以答案就是小於 的質因數個數,然後再檢查 共有多少個質因數 因為要加一,所以我想了很久 感覺這種題目就是會卡 解(被這種題目雷到好幾次@@) 但是我真的沒有想法 所以就寫了個 的解法 。。。然後過了,wtf 就真的把 暴力做,然後暴力檢查 就這樣。。。 我一臉懵逼的坐在電腦前傻了一下 才開始動手打這篇文章
code
// by. MiohitoKiri5474
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define maxN 1000000
bitset < maxN > lib;
vector < LL > prime;
int main(){
ios::sync_with_stdio ( false );
cin.tie ( 0 );
cout.tie ( 0 );
#define int LL
lib[0] = lib[1] = true;
for ( int i = 2 ; i < maxN ; i++ ){
if ( !lib[i] ){
prime.push_back ( i );
for ( int j = i ; j < maxN ; j += i )
lib[j] = true;
}
}
int a, b, len = prime.size();
LL ans, stp;
while ( cin >> a >> b ){
if ( a > b )
swap ( a, b );
ans = upper_bound ( prime.begin(), prime.end(), a ) - prime.begin();
stp = 1;
for ( int i = a + 1 ; i <= b ; i++ ){
stp *= i;
}
stp++;
for ( int i = 0 ; i < ans ; i++ ){
while ( stp % prime[i] == 0 ){
stp /= prime[i];
}
}
for ( int i = ans ; i < len ; i++ ){
if ( !( stp % prime[i] ) ){
ans++;
while ( stp % prime[i] == 0 )
stp /= prime[i];
}
}
if ( stp > maxN )
ans++;
cout << ans << '\n';
}
}
後記
最近特殊選才有點忙 加上 CodeForces,校內賽的陰影 我可能會暫時停筆一下啦XD 沒有意外,等到特選告一段落會繼續。。。吧 等等印象中好像有 CodeForces,啊不過有點晚 會不會打還是未知數 下禮拜的 HPCW、MCC 打完,應該又會停一段時間吧 在特選放榜前我應該不會繼續認真搞比賽了 因為我不知道在放榜後我會何去何從(笑 先讀點書好像比較保險
不過如果特選有好結果我還是會認真搞 TOI 入營考啦 已經是最後一年了,能不能進去就聽由天命囉
然後,謝謝看到這邊的你 (我這麼寫怎麼有點感傷啊XD) 我已經很久沒有發文了,希望大家還有在看 謝謝各位一直以來對我的支持 <3