题目链接:D:Two Divisors

题意:

给你n个数,对于每一个数vi,你需要找出来它的两个因子d1,d2。这两个因子要保证gcd(d1+d2,vi)==1。输出的时候输出两行,第一行输出每一个数vi对应的第一个因子d1,第二行对应位置输出第二个因子d2

题解:

最大公约数有两个基本性质如下:

  1. gcd(a,b)=gcd(a±b,b)=gcd(a,b±a);
  2. if(gcd(a,b)==1) gcd(a,bc)=gcd(a,c);

设p1、p2、p3...pm是一个数x的所有质因子,我们设d1=p1^k(它的意思就是p1的k次方),d2=x/d1。这个k要保证d2%p1!=0

而且还会有x=p1^k1*p2^k2*...*pk^km=d1*d2

我们很容易就知道gcd(d1,d2)==1,毕竟d1是质因子p1的平方所得

那么gcd(d1,d2)=gcd(d1+d2,d1)=gcd(d1+d2,d2),又因为x=d1*d2

所以d1+d2就和x互质

因为样例有好多组,所以我们就先通过线性筛的方法进行预处理,具体看代码:

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<deque>
7 #include<string.h>
8 #include<map>
9 #include <iostream>
10 #include <math.h>
11 using namespace std;
12 typedef long long ll;
13 const int maxn=1e7+10;
14 int minprim[maxn],prim[maxn],v[maxn],ans1[maxn],ans2[maxn];
15 int finds(int n) //线性筛
16 {
17 int num=0; //num为从2到maxn这个范围内所有质数(也就是素数)的个数
18 for(int i=2;i<=n;++i)
19 {
20 //minprim数组里面保存的是i的最小质因子(所谓质因子也就是为素数的因子)
21 if(!minprim[i]) prim[++num]=i,minprim[i]=i;
22 for(int j=1;j<num && prim[j]*i<=n;++j)
23 {
24 minprim[i*prim[j]]=prim[j];
25 }
26 }
27 return num;
28 }
29 int main()
30 {
31 int n;
32 finds(1e7);
33 scanf("%d",&n);
34 for(int i=1;i<=n;++i)
35 scanf("%d",&v[i]);
36 //printf("%d***\n",minprim[24]);
37 for(int i=1;i<=n;++i)
38 {
39 int ans=minprim[v[i]],temp;
40 v[i]/=ans;
41 temp=ans;
42 while(v[i]%ans==0) v[i]/=ans,temp*=ans;
43 if(v[i]==1)
44 ans1[i]=ans2[i]=-1;
45 else ans1[i]=temp,ans2[i]=v[i];
46
47 }
48 for(int i=1;i<=n;++i)
49 {
50 if(i==n) printf("%d\n",ans1[i]);
51 else printf("%d ",ans1[i]);
52 }
53 for(int i=1;i<=n;++i)
54 {
55 if(i==n) printf("%d\n",ans2[i]);
56 else printf("%d ",ans2[i]);
57 }
58 return 0;
59 }

Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors 线性筛质因子的更多相关文章

  1. Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors (数学)

    题意:有\(n\)组数,对于每组数,问是否能找到两个因子\(d_{1},d{2}\),使得\(gcd(d_{1}+d_{2},a_{i}=1)\),如果有,输出它们,否则输出\(-1\). 题解:对于 ...

  2. Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths(贪心)

    题目链接:https://codeforces.com/contest/1366/problem/C 题意 有一个 $n \times m$ 的 $01$迷宫,要使从 $(1,1)$ 到 $(n,m) ...

  3. Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)

    题目链接:https://codeforces.com/contest/1366/problem/B 题意 大小为 $n$ 的数组 $a$,除了 $a_x = 1$,其余 $a_i = 0$,依次给出 ...

  4. Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords(贪心/数学)

    题目链接:https://codeforces.com/contest/1366/problem/A 题意 有两个数 $a$ 和 $b$,每次可以选择从一个数中取 $2$,另一个数中取 $1$,问最多 ...

  5. Educational Codeforces Round 89 (Rated for Div. 2) C Palindromic Paths

    题目链接:Palindromic Paths 题意: 给你一个n行m列的矩阵,这个矩阵被0或者1所填充,你需要从点(1,1)走到点(n,m).这个时候会有很多路径,每一条路径对应一个01串,你可以改变 ...

  6. Educational Codeforces Round 89 (Rated for Div. 2) A Shovels and Swords B、Shuffle

    题目链接:A.Shovels and Swords 题意: 你需要一个木棍和两个钻石可以造出来一把剑 你需要两个木棍和一个钻石可以造出来一把铁锹 你现在有a个木棍,b个钻石,问你最多可以造出来几件东西 ...

  7. Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)

    题意:你有\(a\)个树枝和\(b\)个钻石,\(2\)个树枝和\(1\)个钻石能造一个铁铲,\(1\)个树枝和\(2\)个钻石能造一把剑,问最多能造多少铲子和剑. 题解:如果\(a\le b\),若 ...

  8. Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths (思维)

    题意:有一个\(n\)x\(m\)的矩阵,从\((1,1)\)出发走到\((n,m)\),问最少修改多少个数,使得所有路径上的数对应相等(e.g:\((1,2)\)和\((n-1,m)\)或\((2, ...

  9. Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)

    题意:有长为\(n\)的排列,其中\(x\)位置上的数为\(1\),其余位置全为\(0\),询问\(m\)次,每次询问一个区间,在这个区间内可以交换任意两个位置上的数,问\(1\)最后出现在不同位置的 ...

随机推荐

  1. 【C++】《C++ Primer 》第六章

    第六章 函数 一.函数基础 函数定义:包括返回类型.函数名字和0个或者多个形参(parameter)组成的列表和函数体. 调用运算符:调用运算符的形式是一对圆括号 (),作用于一个表达式,该表达式是函 ...

  2. version can neither be null, empty nor blank

    在用mybatis-generator逆向生成mapper和DAO的时候,出现了这个错误. mybatis-generator:generate 原因是在pom.xml中我的mysql依赖没有写版本号 ...

  3. Linux学习笔记 | docker基本命令

    Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动.开始.停止.删除.而这些容器都是相 ...

  4. python学习笔记 | PyCharm出现卡顿解决方法

    问题:使用pycharm时常出现 the IDE is running low on memory 的问题 表示pycharm这款IDE使用内存不足 需要在系统内存充足的情况下扩充IDE memory ...

  5. Hdfs手动执行Balance

    问题发现: 经巡检,服务器中一台节点的hadoop磁盘占用过多,是其它节点的三倍,导致数据严重不均衡. 解决过程: 两种命令: hadoop的bin目录下,运行命令start-balancer.sh ...

  6. 关于SSRF与CSRF漏洞的解释

    目录 SSRF服务端请求伪造(外网访问内网) 1.SSRF形成原因 2.利用SSRF漏洞的目的 3.SSRF漏洞的用途 4.SSRF漏洞的特性 实例 5.如何挖掘SSRF漏洞 6.常用SSRF去做什么 ...

  7. 前端知识(二)05-Eslint语法规范检查-谷粒学院

    目录 一.ESLint简介 二.启用ESLint 1.ESLint插件安装 2.插件的扩展设置 3.确认开启语法检查 三.ESLint规则说明 1.规则说明 2.语法规则 一.ESLint简介 ESL ...

  8. OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇

    少废话,先上效果图 屏幕显示效果         全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...

  9. 001.IT运维面试问题-Linux基础

    Linux基础 简述Linux主流的发行版? Redhat.CentOS.Fedora.SuSE.Debian.Ubuntu.FreeBSD等. 简述Linux启动过程? ⑴开机BIOS自检,加载硬盘 ...

  10. 一文搞定全场景K3s离线安装

    作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营.拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Lin ...