sdnu oj 1283 山師好男友 思維

2021-10-03 05:14:44 字數 1218 閱讀 1863

參考

可以看出,被按了奇數次數的燈最後是開著的,而被按了偶數次數的燈最後是關著的。

因為是從 2 開始按的, 所以如果乙個數有偶數個因子那就會被按奇數次,如果有奇數個因子就會被按偶數次。

所以轉化為求 [a, b] 內有偶數個因子的數

這就會涉及到質因子分解定理,即任何正數都能被分解成多個質數的冪次乘積的形式

n=(p[1] ^ e[1])(p[2] ^ e[2])……(p[k]^e[k]),其中p[i]是質數,e[i]是p[i]的冪次。而由這個公式我們又可以匯出乙個數有多少個因子的計算公式:factornumber(n)=(e[1]+1)(e[2]+1)……(e[k]+1)。

因為 奇 * 奇 = 奇, 奇 * 偶= 偶, 偶 * 偶 = 偶,顯然判斷奇數 factornumber(n) 比判斷偶數 factornumber(n) 簡單

那麼什麼條件下滿足factornumber(n)是奇數呢?顯然必須所有的e[1],e[2],……,e[k]都必須是偶數,這樣才能保證e[i]+1是奇數,結果乘積才能是奇數。而由於e[1],e[2],……,e[k]都是偶數,那麼n一定是乙個完全平方數(因為sqrt(n)=(p[1] ^ (e[1]/2)) ( p[2] ^ (e[2]/2))……*(p[k]^(e[k]/2))是整數) 。

回到按燈泡的問題上來,最後編號為完全平方數的燈關著的, 非完全平方數的燈是開著的

#include

#include

#include

#include

#include

#include

#include

#include

#define mod 1000000007

using namespace std;

typedef

long

long ll;

const

int n =

106;

const

long

long inf =

0x3f3f3f3f

;const

double eps =

1e-5

;const

double pi =

acos(-

1);int

main()

printf

("%d\n"

, ans)

;return0;

}

關於sdnuoj1060反思

給定 n 1 n 10000000 個正整數 2147483647 找出其中的第k 1 k 10 大數。第一行,兩個整數n,k,第二行n個整數 第k大數 正解 include include include using namespace std int main for int i 0 i n i...

SDNUOJ 1038 收集寶藏

description 有乙個n n的矩陣,矩陣每個格仔中都有一些寶藏,從左上角 1,1 出發,每次只能向下或者向右移動一格,已知每個格仔中寶藏的價值,求走到右下角 n,n 時能收集到的寶藏的總最大價值。input 第一行為乙個整數n 1 n 1000 表示矩陣的行 列數。接下來n行,每行n個整數,...

1283 最小周長

1283 最小周長 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 乙個矩形的面積為s,已知該矩形的邊長都是整數,求所有滿足條件的矩形中,周長的最小值。例如 s 24,那麼有 這4種矩形,其中的周長最小,為20。input 輸入1個數s 1 s 1...