【求质因子模板】

n是质数<=>n没有小于等于sqrt(n)的素因子

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=1e5+2;
 5 ll n;
 6 int ans[maxn];
 7 int main()
 8 {
 9     while(~scanf("%I64d",&n))
10     {
11         int cnt=0;
12         for(int i=2;i*i<=n;i++)
13         {
14             if(n%i==0)
15             {
16                 ans[cnt++]=i;
17                 while(n%i==0)
18                 {
19                     n/=i;
20                 }
21             }
22         }
23         if(n>1) ans[cnt++]=n;
24         for(int i=0;i<cnt;i++)
25         {
26             cout<<ans[i]<<" ";
27         }
28         cout<<endl;
29     }
30     return 0;
31 }

求一个很大的数的质因子

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=1e5+2;
 5 bool isprime[maxn];
 6 vector<int> a[maxn];
 7 int main()
 8 {
 9     memset(isprime,true,sizeof(isprime));
10     for(int i=2;i<maxn;i++)
11     {
12         if(!vis[i]) continue;
13         a[i].push_back(i);
14         for(int j=2*i;j<maxn;j+=i)
15         {
16             a[j].push_back(i);
17             vis[j]=false;
18         }
19     }
20     return 0;
21 }

求多个比较小的数的质因子

时间: 2024-10-09 22:56:43

【求质因子模板】的相关文章

Java小例子——穷举质数,求平方和,求质因子。

求平方和 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public static void main(String[] args) throws IOException     {         int n;         String s;         BufferedReader buf;         buf=new BufferedReader(new In

CodeForces 546D Soldier and Number Game 打表(求质因子个数)

题目:戳我 题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数n,问你n有多少个质因子,不过这里n是通过a!/b!给定的,也就是说n=(a!/b!); 分析:由于这里1 ≤ b ≤ a ≤ 5 000 000,数据很大,所以简单暴力一定超时,具体看代码. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int M = 5e6+5; 5 6 int t; //测试组数 7

Codeforces546D:Soldier and Number Game(求质因子个数)

Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and gives it to the second soldier. Then the second one tries to make maximum possible number of rounds. Each round consists of choosing a positive integer x

poj 1811, poj 2429 (pollard_rho算法)

poj 1811 题意: 给出一个整数n,判断n是不是素数,如果不是素数,输出最小的质因子. 限制: 2 <= N < 2^54 思路: miller_rabin算法判素数 pollard_rho算法求质因子 复杂度O(log(n)) poj 2429 题意: 给出两个数的lcm和gcd,求这两个数. 限制: 0 < lcm,gcd < 2^63 思路: pollard_rho O(log(n))分解质因数. 可以考虑到2^63不同的质因数只有20左右个,而相同的质数不可能分在不同

Description has only two Sentences(欧拉定理 +快速幂+分解质因数)

Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 124 Accepted Submission(s): 55   Problem Description an = X*an-1 + Y and Y mod (X-1) = 0.Your task is to calculat

hdu5317 RGCDQ

RGCDQ 题意:F(x)表示x的质因子的种数.给区间[L,R],求max(GCD(F(i),F(j)) (L≤i<j≤R).(2<=L < R<=1000000) 题解:可以用筛选法求质因子种数. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; co

数学问题——质因子分解

所谓质因子分解是指将一个正整数 n 写成一个或多个质数的乘积形式,例如 24=2*2*2*3.显然,由于最后都要归结到若干不同质数的乘积,不妨先把素数表打印出来. 由于每个质因子都可以不止出现一次,因此不妨定义结构体 factor ,用来存放质因子及其个数,如下所示: 1 struct factor { 2 int x, cnt; // x 为质因子,cnt 为其个数 3 } fac[10]; 而有一个结论:对一个正整数 n 来说,如果它存在 [2,n] 范围内的质因子,要么这些质因子全部小于等

1171: lfx捧杯稳啦!

escription Lfx在复习离散的时候突然想到了一个算法题,毕竟是lfx, 算法题如下: 他想知道这样的问题,先定义1~n中即是3的倍数,又是11的倍数的那些数的和sum, 他想知道sum有多少个质因子,以及1~sum-1中有多少个数与sum互质? 1<= N <= 1e6 输入: 一个整数n 输出 两个整数,分别代表sum质因子的数量以及1~sum-1中与sum互质的数量. 思路: 先1~n扫一下求sum值,然后用唯一分解定理求质因子的数量,用欧拉函数求互质的数量. 唯一分解定理的步骤

AcWing 197. 阶乘分解 (筛法)打卡

给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi,cipi,ci,表示含有pciipici项.按照pipi从小到大的顺序输出. 数据范围 1≤N≤1061≤N≤106 输入样例: 5 输出样例: 2 3 3 1 5 1 题意:我们要求一个阶乘里面化成最简质因子相乘的每个质因子个数是多少思路:我们肯定不能一个一个数单独求,我们应该一个一个范围求质因子