目录
第2题:[NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷
第9题:[USACO1.5]八皇后 Checker Challenge - 洛谷
第1题:【模板】线性筛素数 - 洛谷
洛谷的题目对python而言实在是太不友好了。这个题,我全部都MLE了,一个也过不了,只能选择用C++来过这道题!
#include<iostream>
const int N_1 = 100000010;
const int N_2 = 1000010;
int lst[N_1];
int prime[N_2];
int temp = 1;
void prime_sift(int n){
for(int i = 2;i <=n;i++){
if(!lst[i]) prime[temp++] = i;
for(int j = 1;j < temp;j++){
if(i * prime[j] > n) break;
lst[i * prime[j]] = 1;
//此处便是线性筛的精髓所在!
if(i % prime[j] == 0) break;
}
}
}
int main(){
int n,q;
scanf("%d%d",&n,&q);
prime_sift(n);
while(q--){
int k;
scanf("%d",&k);
printf("%d\n",prime[k]);
}
}
第2题:[NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷
这个题python必须进行相应的剪枝,不然用纯暴力的话,过不了全部的检测点!
import math
x0,y0 = map(int,input().split())
m = x0 * y0
n = int(math.sqrt(m))
def gcd(a,b):
if b == 0:
return a
else:
return gcd(b,a%b)
count = 0
if y0 % x0:
print(0)
elif x0 == y0:
print(1)
elif x0 > y0:
print(0)
else:
for i in range(x0,n + 1):
if m % i == 0 and gcd(i,m//i) == x0:
count += 1
count *= 2
if x0 * x0 == y0:
count -= 1
print(count)
第3题:【模板】快速幂||取余运算 - 洛谷
a,b,p = map(int,input().split())
def ksm(x,n):
if n == 0:
return 1
elif n == 1:
return x
res = 1
while n:
if n & 1:
#因为最后的结果是对p取余,所以根据同余定理,每一步都取余!
#不然的话,python会过不了全部测试用例