ACM中的一些基礎題

2021-06-20 12:52:19 字數 1632 閱讀 7482

素數是指只能被1和本身整除的自然數(1不是素數)。關鍵是判斷乙個數是否為素數。

bool isprime(int);

int main()

return 0;

}//判斷乙個數是否為素數

bool isprime(int a)

}return true;

}

source:hdoj 1406

problem description

完數的定義:如果乙個大於1的正整數的所有因子之和等於它的本身,則稱這個數是完數,比如6,28都是完數:6=1+2+3;28=1+2+4+7+14。

本題的任務是判斷兩個正整數之間完數的個數。

input

輸入資料報含多行,第一行是乙個正整數n,表示測試例項的個數,然後就是n個測試例項,每個例項佔一行,由兩個正整數num1和num2組成,(1

output

對於每組測試資料,請輸出num1和num2之間(包括num1和num2)存在的完數個數。

hint:

本題限時1s。先把小於10000的完數計算出來,放到向量中,然後用num1和num2為上下界去查詢它們之間完數的個數。

注意:num1可能大於num2,此時必須交換二者的次序。

這個演算法不會超時。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

int main()

}if (sum == i)

}int n(0);

int a(0), b(0);

while (cin >> n)

cout << distance(lower_bound(coll.begin(), coll.end(), a), upper_bound(coll.begin(), coll.end(), b))判斷乙個數是否為對稱且不大於九位數的素數。

hint:

判斷乙個數是否為素數比較簡單,但是判斷乙個九位以內的數是否對稱可能比較麻煩。這裡我採用的方法是先把整數轉化成字串,然後反轉字串,判斷二者是否相等,這樣就能很輕鬆的判斷是乙個數是否對稱。

**如下:

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

bool isprime(int);

bool issym(int);

int main()

else

}return 0;

}bool isprime(int n)

}return true;

}bool issym(int n)

return false;

}

一些PAT基礎題

6 10本題要求實現乙個列印非負整數階乘的函式。函式介面定義 void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input void print factor...

一些ACM鏈結

武漢大學 felioj 四川大學 中科大 哈工大 華東師範 杭州電子 吉林大學 西南科大 哈工程 湖南大學 福州大學 北航 華中科大 南開大學 北師大 vijos 高中生的oj uva ural sgu spoj el krsu usaco 中國各大高校bbs forum 杭電 浙大 清華 上交 復...

推薦一些ACM的書籍

這是我的第一本入門書,這本書是配套北大的百煉習題,注意不是poj,貌似是北大內部測試用的,不過也是對外開放的,去年好像百煉變化過,所以 不知道這本書還適不適合那個新的百煉系統 2.演算法競賽入門經典 這本書沒話說,劉汝佳的白書,經典的演算法入門書籍。強烈推薦 3.演算法藝術與資訊學競賽 劉汝佳的黑書...