Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors 线性筛质因子
题目链接:D:Two Divisors
题意:
给你n个数,对于每一个数vi,你需要找出来它的两个因子d1,d2。这两个因子要保证gcd(d1+d2,vi)==1。输出的时候输出两行,第一行输出每一个数vi对应的第一个因子d1,第二行对应位置输出第二个因子d2
题解:
最大公约数有两个基本性质如下:
- gcd(a,b)=gcd(a±b,b)=gcd(a,b±a);
- 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 线性筛质因子的更多相关文章
- 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\). 题解:对于 ...
- 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) ...
- 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$,依次给出 ...
- Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords(贪心/数学)
题目链接:https://codeforces.com/contest/1366/problem/A 题意 有两个数 $a$ 和 $b$,每次可以选择从一个数中取 $2$,另一个数中取 $1$,问最多 ...
- Educational Codeforces Round 89 (Rated for Div. 2) C Palindromic Paths
题目链接:Palindromic Paths 题意: 给你一个n行m列的矩阵,这个矩阵被0或者1所填充,你需要从点(1,1)走到点(n,m).这个时候会有很多路径,每一条路径对应一个01串,你可以改变 ...
- Educational Codeforces Round 89 (Rated for Div. 2) A Shovels and Swords B、Shuffle
题目链接:A.Shovels and Swords 题意: 你需要一个木棍和两个钻石可以造出来一把剑 你需要两个木棍和一个钻石可以造出来一把铁锹 你现在有a个木棍,b个钻石,问你最多可以造出来几件东西 ...
- Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
题意:你有\(a\)个树枝和\(b\)个钻石,\(2\)个树枝和\(1\)个钻石能造一个铁铲,\(1\)个树枝和\(2\)个钻石能造一把剑,问最多能造多少铲子和剑. 题解:如果\(a\le b\),若 ...
- 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, ...
- Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
题意:有长为\(n\)的排列,其中\(x\)位置上的数为\(1\),其余位置全为\(0\),询问\(m\)次,每次询问一个区间,在这个区间内可以交换任意两个位置上的数,问\(1\)最后出现在不同位置的 ...
随机推荐
- Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)
概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...
- 深入理解MySQL索引(下)
先创建一个T表. mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT ...
- Java设计模式精讲之UML急速入门
简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...
- 【ORA】ORA-39002,ORA-39070,ORA-29283, ORA-06512,ORA-29283解决办法
今天使用IMPDP导入的时候报了一个错误 ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-2928 ...
- ctfhub技能树—信息泄露—git泄露—index
打开靶机 查看页面信息 使用dirsearch进行扫描 使用githack工具处理git泄露情况 使用git log命令查看历史记录 与 add flag 9b5b58-- 这次提交进行比对 即可拿到 ...
- python协程爬取某网站的老赖数据
import re import json import aiohttp import asyncio import time import pymysql from asyncio.locks im ...
- Array.of使用实例
Array.of是es6新增的API,其实粗暴点理解,光看of,就可以猜到它是数组的意思,所以猜测可以用来把字符串转换成数组. 像这样的table,有批量删除和单个删除的功能,,但是又不想写两个方法, ...
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- 手机QQ空间自动点赞登录
学以致用~使用 Appium 模拟人类操控手机行为 V2.0在手机上运行,目前实现以下功能: 1.小黑屋模式,一分钟内给好友发100条消息然后进了好友的小黑屋 2.定时发消息提醒对象多喝热水~ 3.对 ...
- .net core 和 WPF 开发升讯威在线客服与营销系统:使用 TCP协议 实现稳定的客服端
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...