(file io): input:num.in output:num.out
時間限制: 1000 ms 空間限制: 262144 kb 具體限制
goto problemset
題目描述
k ckc
kc邀請他的兩個小弟k
kk和c
cc玩起了數字遊戲。遊戲是k
kk和c
cc輪流操作進行的,k
kk為先手。kckc
kc會先給定乙個數字q
qq,每次操作玩家必須寫出當前數字的乙個因數來代替當前數字,但是這個因數不能是1
11和它本身。例如當前數字為6
66,那麼可以用2,3
2,32,
3來代替,但是1
11和6
66就不行。現在規定第乙個沒有數字可以寫出的玩家為勝者。k
kk在已知q
qq的情況,想知道自己作為先手能不能勝利,若能勝利,那麼第一次寫出的可以制勝的最小數字是多少呢?整個遊戲過程我們認為k
kk和c
cc用的都是最優策略。
輸入
只包括乙個正整數qqq
輸出
第一行是1
11或2,1
2,12,
1表示k能勝利,2
22表示c
cc能勝利。
若k能勝利,則在第二行輸出第一次寫出的可以制勝的最小數字,若是第一次就無法寫出數字,則認為第一次寫出的可以制勝的最小數字為000。
說明:若c
cc能勝利,不用輸出第二行,輸出2
22即可。
樣例輸入
6樣例輸出
2資料範圍限制
對於30
30%30
的資料,q
<=50
q<=50
q<=5
0; 對於100
100%
100的資料,q
<=1
01
3q<=10^13
q<=1
013。
解題思路
思路:數學
求出q
qq的質因數的個數
這道題分為三種情況:
1:n
nn為質數,k
kk贏,第一次寫出0
00。(第一次就沒有可以輸出的)。
2:n
nn為兩個質數的乘積(兩個質數可以相等),c
cc贏。
3:n
nn很複雜,則輸出n
nn最小的兩個質因數(可以相等,即n=k
∗t∗t
n=k*t*t
n=k∗t∗
t, t
tt為此質因數)的積。
**
#include
#include
#include
#include
#include
#include
using namespace std;
long long q,a[
100000
],k,n;
int main()
}if(q!=1)
a[++k]
=q;if
(k==1)
printf
("1\n0\n");
else
if(k==2)
printf
("2\n");
else
return0;
}
餐桌 紀中 1237 水 數學
description 你家剛買了一套新房,想邀請朋友回來慶祝,所以需要乙個很大的舉行餐桌,餐桌能容納的人數等於餐桌的周長,你想買乙個能容納最多人的餐桌,餐桌的邊必須跟房間的邊平行。給你的房間的設計,計算最多能邀請的客人數。input 第一行包含兩個整數r和c 1 r,c 2000 表示房子的長和寬...
電影票 紀中 3057 數學
笨笨當了很久的道路排程員,笨笨也開始想體驗生活,從生活中發現數學問題,鍛鍊自己思維。最近 變形金剛3 哈利波特7 同步放映,明顯是決戰雌雄,已知王府井中一共有n人買了 變形金剛3 的票,m人買了 哈利波特7 的票,並且n m,並且電影院中現在只有兩種票,每次只有乙個人買,共有n m次 這n m次組成...
電影票 紀中3057 組合數學
笨笨當了很久的道路排程員,笨笨也開始想體驗生活,從生活中發現數學問題,鍛鍊自己思維。最近 變形金剛3 哈利波特7 同步放映,明顯是決戰雌雄,已知王府井中一共有n人買了 變形金剛3 的票,m人買了 哈利波特7 的票,並且n m,並且電影院中現在只有兩種票,每次只有乙個人買,共有n m次 這n m次組成...