首页 > 其他分享 >X的因子链【多重集的排列数问题】

X的因子链【多重集的排列数问题】

时间:2023-03-20 23:00:33浏览次数:25  
标签:p2 cnt 排列 int 多重集 因子 p1 include

X的因子链

输入正整数 X,求 X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。

输入格式
输入包含多组数据,每组数据占一行,包含一个正整数表示 X。

输出格式
对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。

每个结果占一行。

数据范围
\(1≤X≤2^{20}\)
输入样例:
2
3
4
10
100
输出样例:
1 1
1 1
2 1
2 2
4 6

关键

  1. 预处理出每个数的最小质因子方便计数

代码

点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<cctype>
using namespace std;

#define X first
#define Y second

typedef pair<int,int> pii;
typedef long long LL;
const char nl = '\n';
const int N = (1 << 20) + 10;
const int M = 2e5+10;
LL f[30];	
vector<int> p;
bool st[N];
int minp[N];

LL fact(int x){
	return (x == 1) ? 1 : fact(x - 1) * x;
}

void init(){	//预处理出阶乘数组还有每个数的最小质因子
	for(int i = 1; i <= 20; i ++ )f[i] = fact(i);//最多有20个
	for(int i = 2; i <= (1 << 20); i ++ ){
		if(!st[i])p.push_back(i),minp[i] = i;
		for(int j = 0; p[j] * i <= (1 << 20); j ++ ){
			st[p[j] * i] = 1;	//p[j]是质数
			minp[p[j] * i] = p[j];
			if(i % p[j] == 0)break;		//p[j]是p[j] * i的最小质因子
		}
	}
}

void solve(){
	int n;
	init();
	while(cin >> n){
		int p1,p2;
		int tot = 0,cnt = 0;
		vector<LL> v;
		while(n != 1){
			p1 = minp[n];
			n /= p1;
			cnt ++;
			p2 = minp[n];
			if(p2 != p1){
			    v.push_back(f[cnt]);
			    cnt = 0;
			}
			tot ++;
		}
		LL ans = f[tot];
		for(auto x:v)ans /= x;
		cout << tot << " "<< ans << nl;
	}	
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	solve();
}

注意

  1. \(2^{20}\)大概是1e6左右

标签:p2,cnt,排列,int,多重集,因子,p1,include
From: https://www.cnblogs.com/J-12045/p/17238322.html

相关文章

  • 全排列(深搜)
    #include<bits/stdc++.h>usingnamespacestd;intn,s[20];boolb[20];voiddfs(intd){if(d==n){for(inti=0;i<n;i++)cout<<s[i]<<"......
  • 排列计数
    排列计数输入样例:510115210050100005000输出样例:012057802888760695423组合数+错排错排式:D[n]=(n-1)*(D[n-1]+D[n-2])#include<bits......
  • 用 DolphinDB 和 Python Celery 搭建一个高性能因子计算平台
    因子挖掘是量化金融研究和交易的核心工作。传统的开发流程中,通常使用Python从关系型数据库(如SqlServer,Oracle等)读取数据,在Python中进行因子计算。随着证券交易规模......
  • 回溯算法解决排列—组合—子集问题
    回溯算法解决排列—组合—子集问题无论是排列、组合还是子集问题,就是让你从序列nums中以给定规则取若干元素,主要有以下几种变体:元素无重不可复选,即nums中的元素都......
  • 力扣中46 全排列
    //可以用类似77组合那种方法只不过加了访问数组//也可以用官方题解来搞设置一个正确排列后直接进行交换publicList<List<Integer>>permute(int[]nums){......
  • R语言因子分析、相关性分析大学生兼职现状调查问卷数据可视化报告
    全文链接:http://tecdat.cn/?p=31765原文出处:拓端数据部落公众号随着大学的普及教育,大学生就业形势变得更加困难,很多学生都意识到这个问题。所以走出象牙塔,去接触社会,来增......
  • 华为OD机试,最大排列
    ......
  • 47.全排列2
    全排列2给定一个可包含重复数字的序列nums,按任意顺序返回所有不重复的全排列。示例1:输入:nums=[1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例2:输入:nums=[1,......
  • 【DFS】LeetCode 46. 全排列
    题目链接46.全排列思路本题是求排列问题.与组合问题不同的是,在排列问题中,不同的数字顺序被视为不同的排列,比如[1,2]与[2,1]是两种不同的排列。搜索树如下图所示,引......
  • 回溯算法之全排列
    leet46全排列解题思路还是全排列的板子题ClassSolution{private:vector<vector<int>>result;vector<int>ans;public:voidbackingtrack(...){if()......