[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