2017 多校4 1003 Counting Divisors

2024-04-01 19:18

本文主要是介绍2017 多校4 1003 Counting Divisors,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://acm.hdu.edu.cn/showproblem.php?pid=6069



求一段区间里面所有数的因子个数和,很直白的去暴力必定超时,

因为任何数都可以被分解为若干个质数相乘的形式,那么意味着可以将所有的质数找到,然后去不断的给一个范围里的数去这个质数来筛.

以后碰到计算因子个数的题目,感觉可以借鉴这道题的方法.



#include<bits/stdc++.h>
using namespace std;
const long long int MOD=998244353;
long long int pr[1111111];
bool vis[1111111];
long long int num[1111111];
long long int sum[1111111];
long long int _js=0;
void _loading(){_js=0;memset(vis,true,sizeof(vis));vis[0]=0;vis[1]=0;for(int i=0;i<=1000005;i++){if(vis[i]==0)continue;vis[i]=0;pr[_js++]=i;for(int j=i*2;j<=1000005;j=j+i)vis[j]=0;}
}
int main(){long long int l,r,k;long long int t;_loading();scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&l,&r,&k);long long int i,j;for(i=0;i<=r-l;i++){num[i]=i+l;sum[i]=1;}for(i=0;i<_js;i++){long long int i1=(l/pr[i]+(l%pr[i]? 1:0 ))*pr[i];for(j=i1;j<=r;j=j+pr[i]){long long int _js1=0;while(num[j-l]%pr[i]==0){_js1++;num[j-l]/=pr[i];}sum[j-l]=sum[j-l]*(1LL*_js1*k+1)%MOD;}}long long int ans=0;for(i=0;i<=r-l;i++){if(num[i]!=1)sum[i]=sum[i]*(k+1)%MOD;ans=(ans+sum[i])%MOD;}cout<<ans<<endl;}return 0;
}


这篇关于2017 多校4 1003 Counting Divisors的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867943

相关文章

2015多校联合训练第三场Work(hdu5326)

题意: a是b的上司,b是c的上司,则a是c的上司,问构成一个树种,有多人是 k个人的上司 思路: 先找出root,然后dfs一下就行 #include <bits/stdc++.h>#define LL long longusing namespace std;const int MAXN = 1e6;int f[105];int n, k;int mp[101][101];

2015年多校联合训练第三场RGCDQ(hdu5317)

题意: f(i)代表i数中有的素数的种数,给出区间[l,r],求区间内max(gcd(f(i))), 由于i最大是1e6,2*3*5*7*11*13*17>1e6,故最多不超过7种素数, 先打表打出1e6内的素数种数表,然后用sum[i][j]代表1-i个数中,还有j个素数的个数,最后用sum[r][j] - sum[l-1][j]求出区间内含有j个素数的数的个数,暴力找出1,2,3,4,5

2015多校联合训练第一场Tricks Device(hdu5294)

题意:给一个无向图,给起点s,终点t,求最少拆掉几条边使得s到不了t,最多拆几条边使得s能到t 思路: 先跑一边最短路,记录最短路中最短的边数,总边数-最短边数就是第二个答案 第一个答案就是在最短路里面求最小割,也就是求最大流,然后根据最短路在建个新图,权为1,跑一边网络流 模板题,以后就用这套模板了 #include <iostream>#include <cstdio>#incl

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

2015年多校联合训练第一场OO’s Sequence(hdu5288)

题意:给定一个长度为n的序列,规定f(l,r)是对于l,r范围内的某个数字a[i],都不能找到一个对应的j使得a[i]%a[j]=0,那么l,r内有多少个i,f(l,r)就是几。问所有f(l,r)的总和是多少。 公式中给出的区间,也就是所有存在的区间。 思路:直接枚举每一个数字,对于这个数字,如果这个数字是合法的i,那么向左能扩展的最大长度是多少,向右能扩展的最大长度是多少,那么i为合法的情况

POJ 2386 Lake Counting(DFS)

题目: http://poj.org/problem?id=2386 题解: 遍历一次,遇到w,一次DFS后,与此w连接的所有w都被替换成‘ . ’,直到遍历完图中不再存在w为止,总共进行DFS的次数就是答案了。 代码: #include<stdio.h>int N,M;char map[110][110];void dfs(int x,int y){map[x][y]='

2017 版本的 WebStorm 永久破解

1.  在IntelliJ官网中下载 最新版本的WebStorm   下载地址:https://www.jetbrains.com/webstorm/download/#section=windows 2. 获取注册码    获取地址:http://idea.lanyus.com/   点击获取注册码,然后将注册码复制,再打开最新版的WebStorm,将注册码粘贴到激活框中就大功告

[LeetCode] 338. Counting Bits

题:https://leetcode.com/problems/counting-bits/description/ 题目 Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary repres

《Zero-Shot Object Counting》CVPR2023

摘要 论文提出了一种新的计数设置,称为零样本对象计数(Zero-Shot Object Counting, ZSC),旨在测试时对任意类别的对象实例进行计数,而只需在测试时提供类别名称。现有的类无关计数方法需要人类标注的示例作为输入,这在许多实际应用中是不切实际的。ZSC方法不依赖于人类标注者,可以自动操作。研究者们提出了一种方法,可以从类别名称开始,准确识别出最佳的图像块(patches),用

2014多校联赛总结

转眼间2014年暑期多校联赛已经落下帷幕,下面是关于暑期比赛的一些总结. 题型统计: 2014 Multi-University Training Contest 1--by FZU A:数学(费马小定理) B:网络流(最小K路径覆盖) C:树形dp(树的重心+数据结构) D:贪心 (巧妙) E:数学+dp(隐含马尔科夫模型) F:线段树(函数式+二分) G:线段树+状态压