NO.1:数论与搜索

目录

第1题:【模板】线性筛素数 - 洛谷

第2题:[NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷

第3题:【模板】快速幂||取余运算 - 洛谷

第4题:迷宫 - 洛谷

第5题:自然数的拆分问题 - 洛谷

第6题:马的遍历 - 洛谷

第7题:填涂颜色 - 洛谷

第8题:kkksc03考前临时抱佛脚 - 洛谷

第9题:[USACO1.5]八皇后 Checker Challenge - 洛谷

第10题:[NOIP2002 提高组] 字串变换 - 洛谷


第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会过不了全部测试用例࿰
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值