wannafly 27 D 巧妙求取约数
链接:https://www.nowcoder.com/acm/contest/215/D
来源:牛客网
题目描述
一个空的可重集合S。
n次操作,每次操作给出x,k,p,执行以下操作:
1、在S中加入x。
2、输出。
输入描述:
- 所有输入的数都是小于1e5+1的正整数。
输出描述:
- 输出对应的结果
输出
- 4
- 2
- 1
- 题意 : 每次增加一个数,求新增加的数同前面每个数的gcd 的 k 次幂再对 p 取模,将答案累加
思路分析 :
考虑每次增加一个数时,需要找到同前面每个数字的 gcd, 本质上的 gcd 就是当前数的约数中的某一个
因此每插入一个新的元素时,就是相当于插入了当前这个数的所有的约数,从最大的约数开始插入,并且每次检索前面有此约数的数有多少个即可
复杂度 n*w*w ,w 为这个数的约数个数,但实际在 w^2 枚举因数时的复杂度是不够 w^2 的
代码示例 :
- #define ll long long
- const ll maxn = 1e5+5;
- ll n;
- ll x, k, p;
- vector<ll>ve[maxn];
- inline ll read() {
- ll x = 0, f = 1; register char ch = getchar();
- while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); }
- while (ch >= '0'&&ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
- return x*f;
- }
- inline void init() {
- for(ll i = 1; i <= 100000; i++){
- for(ll j = i; j <= 100000; j += i){
- ve[j].push_back(i);
- }
- }
- }
- inline ll qw(ll x, ll cnt){
- ll res = 1;
- while(cnt){
- if (cnt&1) res *= x;
- res %= p;
- x *= x;
- x %= p;
- cnt >>= 1;
- }
- return res;
- }
- ll cnt[maxn], del[maxn];
- ll pp[maxn], pt[maxn];
- inline void solve() {
- for(ll i = 0; i < ve[x].size(); i++) cnt[ve[x][i]]++;
- ll ans = 0;
- ll c = 0;
- for(ll i = ve[x].size()-1; i >= 0; i--){
- ll num = ve[x][i];
- if (cnt[num] <= del[num]) continue;
- ans += (cnt[num]-del[num])*qw(num, k)%p;
- ans %= p;
- for(ll j = 0; j < ve[num].size(); j++){
- ll f = ve[num][j];
- del[f] += (cnt[num]-del[num]);
- }
- }
- for(int i = 0; i < ve[x].size(); i++) del[ve[x][i]] = 0;
- printf("%lld\n", ans);
- }
- int main() {
- init();
- cin >> n;
- for(ll i = 1; i <= n; i++){
- x = read(), k = read(), p = read();
- solve();
- }
- return 0;
- }
wannafly 27 D 巧妙求取约数的更多相关文章
- java 求取某一段时间内的每一天、每一月、每一年
1.求取某一段时间内的每一天 Date date0 = new SimpleDateFormat("yyyy-MM-dd").parse("2014-01-01" ...
- OpenCV 最小二乘拟合方法求取直线倾角
工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv ...
- php自定义函数求取平方根
<?phpfunction sqare($a, $left, $right){ $mid = ($left + $right)/2; if($mid * $mid == $a || (abs($ ...
- oracle 当前年到指定年的年度范围求取
如下面公式所示,求取2015到当前年(2018)的年度范围,当前年是由系统获取的,用到了sysdate和函数to_char,to_date. 当然,当前年也可以换成指定年份 SELECT TO_CHA ...
- poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数 题目大意:如题目所示 给你一些关系图——连通图,想要问你有没有个节点,损坏后,可以生成几个互相独立的网络(也就是连通分量), ...
- python 库 Numpy 中如何求取向量范数 np.linalg.norm(求范数)(向量的第二范数为传统意义上的向量长度),(如何求取向量的单位向量)
求取向量二范数,并求取单位向量(行向量计算) import numpy as np x=np.array([[0, 3, 4], [2, 6, 4]]) y=np.linalg.norm(x, axi ...
- K:求取数组中最大连续子序列和的四个算法
相关介绍: 求取数组中最大连续子序列和问题,是一个较为"古老"的一个问题.该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有 ...
- 使用C#版OpenCV进行圆心求取
OpenCVSharp是OpenCV的.NET wrapper,是一名日本工程师开发的,项目地址为:https://github.com/shimat/opencvsharp. 该源码是 BSD开放协 ...
- 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1
自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...
随机推荐
- linux如何查看nginx是否启动
Nginx是一个高性能的反向代理服务器,现在一般作为我们网站或其他Web服务的第一层代理,用户在浏览器请求首先经过的就是Nginx服务. 如果Nginx服务没有启动或异常结束,将会影响Web服务的正常 ...
- Vue 语法的一些小问题
设置 sty行内样式 :style="{width:mapWidth,height:mapHeight}" This指向 axios 使用axios 的时候 ,在生命周期函数 ...
- 基于@AspectJ注解配置切面与基于XML配置切面
1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...
- 符合阿里巴巴代码规范的checkstyle检测文件
一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...
- 【js】 vue 2.5.1 源码学习(六) initProxy initLifeCycle 渲染函数的作用域代理
大体思路 (五) 1. initProxy 渲染函数的作用域代理 ==> es6 如果支持proxy (hasProxy) 就用proxy 不支持就用 defineProperty() prox ...
- H3C FTP配置示例
- Android4_学会使用Log打印
一.Log介绍: Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v() .用于打印那些最为琐碎的.意义最小的日志信息. ...
- HDU 2068 RPG错排 [错排公式]
1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: ...
- 利用OGG进行数据库表的初始化
OGG初始化 1.停止目标端re1进程 2.配置ei进程(若目标端有ei进程之前投递的文件则先清空) GGSCI (localhost) 1>add extract ei1, sourceist ...
- DRF框架中的异常处理程序
目录 DRF框架中自定义异常处理 一.自定义异常的原因 二.如何设置处理异常的程序 DRF框架中自定义异常处理 一.自定义异常的原因 在Django和DRF框架中都封装了很多的处理异常的程序,可以处理 ...