hdu 6069 区间筛

题意:。。一个公式


思路:和区间筛类似POJ 2689。。。筛出L,R的每个质因数的个数即可,然后简单的组合公式,就可以算出i的k次方的约数个数

PS。。vector乱搞会卡常。。


代码:

#include<bits/stdc++.h>
using namespace std;
#define MEM(a,b) memset(a,b,sizeof(a))
#define PB push_back
#define MP make_pair
#define X first
#define Y second
#define bug puts("bug");
typedef long long ll;
const int maxn=1e6+10;
const int MAXN=1000010;
const int mo=998244353;
ll prime[MAXN+1];
void getPrime(){
    memset(prime,0,sizeof(prime));
    for(int i=2; i<=MAXN; i++){
        if(!prime[i])prime[++prime[0]]=i;
        for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++){
            prime[prime[j]*i]=1;
            if(i%prime[j]==0) break;
        }
    }
}
ll t,l,r,k;
ll X[maxn],A[maxn];

int main(){
    getPrime();
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld%lld",&l,&r,&k);
        for(ll i=l;i<=r;i++) X[i-l]=i,A[i-l]=1;
        ll ans=0,ret,be,p;
        for(ll i=1;prime[i]*prime[i]<=r&&i<prime[0];++i){
            be=l-l%prime[i],p=prime[i];
            if(be<l) be+=p;
            for(ll j=be;j<=r;j+=p){
                ret=1;
                while(X[j-l]%p==0){
                    ret=(ret+k)%mo;
                    X[j-l]/=p;
                }
                A[j-l]=(A[j-l]*ret)%mo;
            }
        }
        for(ll i=l;i<=r;i++) if(X[i-l]!=1) A[i-l]=(A[i-l]*(k+1))%mo;
        for(ll i=l;i<=r;i++)ans=(A[i-l]+ans)%mo;
        printf("%lld\n",ans);
    }
    return 0;
}



### 三个月备考百度之星比赛的算法训练计划(一个月冲刺版) 百度之星比赛作为国内高水平的编程竞赛之一,对选手的算法基础、编码能力以及问题建模能力有较高要求。对于不同起点的参赛者,应根据自身情况制定相应的学习和训练策略。若为大二及以上且基础较弱的学生,建议慎重投入过多时间以避免“打铁”风险[^1]。但若已有一定算法基础或目标是参与并取得中等以上成绩,则可参考以下为期一个月的高强度训练计划。 --- ### 第一周:夯实核心算法基础 重点掌握数据结构与基础算法的核心内容,确保能在实际题目中快速应用。 - **数据结构**: - 线性结构:数组、链表、栈、队列、双端队列 - 树状结构:堆(优先队列)、并查集、线段树(初步了解) - 哈希表与字典树(Trie) - **排序与查找**: - 快速排序、归并排序、计数排序 - 二分查找(包括上下界、浮点数精度处理) - **图论基础**: - 图的表示方式(邻接矩阵、邻接表) - 深度优先搜索(DFS)与广度优先搜索(BFS) - 拓扑排序、强连通分量(Kosaraju 或 Tarjan) ```python # BFS模板示例 from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: node = queue.popleft() for neighbor in graph[node]: if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) ``` --- ### 第二周:动态规划与贪心策略强化 该阶段重点提升对状态设计和转移的理解,掌握常见DP模型,并熟悉贪心策略的适用条件。 - **动态规划类型**: - 背包问题(01背包、完全背包) - 区间DP(如石子合并) - LIS/LCS/最大子数组和等经典问题 - 数位DP(可选) - **贪心策略**: - 活动选择、区间调度、哈夫曼编码 - 贪心与DP结合题型练习 ```python # 最长递增子序列(LIS)DP解法 def lis(nums): n = len(nums) dp = [1] * n for i in range(n): for j in range(i): if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] + 1) return max(dp) ``` --- ### 第三周:图论进阶与数学优化 深入掌握图论中的最短路径、最小生成树、网络流等内容,并加强数论与组合数学的应用能力。 - **图论进阶**: - Dijkstra、Bellman-Ford、SPFA、Floyd-Warshall - Kruskal、Prim(MST) - 网络流(Edmonds-Karp、Dinic) - **数论与组合数学**: - 快速幂、欧几里得算法、扩展欧几里得 - 素数筛法(埃氏筛、线性筛) - 排列组合、卡特兰数、卢卡斯定理(可选) ```python # 快速幂算法 def fast_pow(a, b, mod): res = 1 a %= mod while b: if b & 1: res = res * a % mod a = a * a % mod b >>= 1 return res ``` --- ### 第四周:真题实战与模拟训练 最后一周集中进行历年百度之星真题训练与模拟赛,提升临场应变能力和代码调试效率。 - **每日安排**: - 上午做一套历年真题(限时3小时) - 下午复盘题解,整理思路与优化代码实现 - 晚上针对当天未掌握的知识点进行专项补漏 - **模拟赛平台推荐**: - HDU OJ(包含大量百度之星原题) - 牛客网、LeetCode Contest、Codeforces(CF Div.2) - **注意事项**: - 强化代码规范与边界条件处理 - 提高读题速度与理解准确性 - 学会合理分配时间,不被难题拖累整体得分 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值