整数因子分解问题(分治法&&欧拉线性筛素数)

这篇具有很好参考价值的文章主要介绍了整数因子分解问题(分治法&&欧拉线性筛素数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述:

 大于1 的正整数n 可以分解为:n=x1*x2*…*xm。

例如,当n=12 时,共有8 种不同的分解式:

12=12;

12=6*2;

12=4*3;

12=3*4;

12=3*2*2;

12=2*6;

12=2*3*2;

12=2*2*3 。

编程任务:

  对于给定的正整数n,编程计算n 共有多少种不同的分解式。

数据输入:

  由文件input.txt 给出输入数据。第一行有1 个正整数n (1≤n≤2000000000)。

结果输出:

将计算出的不同的分解式数输出到文件output.txt 。

输入文件示例          输出文件示例

input.txt            output.txt

 12                      8

本题使用到了分治法欧拉线性筛法来求解

欧拉线性筛法时间复杂度为O(n):

参考到这篇博客:

初等数论1(对应基础课数学知识第一堂课) - AcWing文章来源地址https://www.toymoban.com/news/detail-795745.html

#include<iostream>
using namespace std;
const int N=100010;
int n,cnt;
bool st[N];
int prime[N];
void getPrime(int n) 
{
    for (int i = 2; i <= n; i++) {
        if (!st[i]) prime[cnt++] = i;
        for (int j = 0; i * prime[j] <= n; j++) {
            st[i * prime[j]] = true;
            if (i % prime[j] == 0) break;
        }
    }
}
int solve(int n)
{
	int k=1;//分解式数量 
//	printf("进入:solve(%d),k=%d\n",n,k);
	if(!st[n]) return 1;
	
	for(int i=n-1;i>=2;i--)
	{
		if(n%i==0) k+=solve(i);
	}
	
//	printf("退出:solve(%d),k=%d\n",n,k);
	return k;
}
int main()
{
	cin>>n;
	
	getPrime(N);
	
	int t=solve(n);
	
	printf("%d",t);
	
	return 0;
}

到了这里,关于整数因子分解问题(分治法&&欧拉线性筛素数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 02 分解质因子

    题目描述: 输入一个数n(n=10^6),将数n分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入 5  输出 5 1 输入 10 输出 2 1 5 1 朴素解法: 首先求出1~n的所有质数,每个质数每个质数的进行去除,要保证n中除尽除完,直到把n除到1为止。 程序实现:

    2024年01月25日
    浏览(30)
  • 1071: 分解质因子

    题目描述 将一个正整数分解质因数,例如,输入90,输出2 3 3 5。 输入 输入一个正整数n(2=n=2000)。 输出 从小到大输出n的所有质因子,每两个数之间空一格。 样例输入  样例输出  提示 注意,最后一个数后面没有空格!! 运行结果:

    2024年01月23日
    浏览(33)
  • 使用卷积操作实现因子分解机

    本文将介绍如何使用卷积操作实现因子分解机器。卷积网络因其局部性和权值共享的归纳偏差而在计算机视觉领域获得了广泛的成功和应用。卷积网络可以用来捕获形状的堆叠分类特征(B, num_cat, embedding_size)和形状的堆叠特征(B, num_features, embedding_size)之间的特征交互。 下图显

    2024年02月10日
    浏览(33)
  • 数学建模十大算法03—线性规划、整数规划、非线性规划、多目标规划

    一、线性规划(Linear Programming,LP) 1.1 引例 在人们的生产实践中,经常会遇到 如何利用现有资源来安排生产,以取得最大经济效益的问题。 此类问题构成了运筹学的一个重要分支一数学规划,而 线性规划(Linear Programming, LP) 则是数学规划的一个重要分支。 简而言之,线

    2024年02月13日
    浏览(31)
  • 混合整数线性规划——选址问题(决策变量0-1问题)MATLAB

    问题: 某快餐连锁经营公司有7个地点(A1,A2,…,A7)可以设立快餐 店,由于地理位置因素,设立快餐店时必须满足以下要求: A1,A2,A3三个地点最多 可选两个,A4和A5至少选取一个,A6和A7至少选取一个 。已知各个地点设立快餐店 的投入和预计收益如表所示。   已知目前

    2024年02月13日
    浏览(30)
  • 算法:分治思想处理归并递归问题

    利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: 以上为归并排序基本算法原理,基于这个原理可以解决逆序对问题,逆序对问题通常问法是,给定某一个数据,在整个数组中找比这

    2024年02月10日
    浏览(33)
  • C++:分治算法之输油管道问题

    目录 描述 输入 输出 输入样例 输出样例 分析 代码 运行结果 ¢ 某石油公司计划建造一条 由东向西 的主输油管道。该管道要穿过一个有 n 口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。 ¢ 如果给定 n 口油井的位置,即它们的 x 坐标(

    2024年02月02日
    浏览(29)
  • Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 ####  防伪水印—— 左手の明天 #### 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享matlab数学建模算法—— 混合整数线性规划 (MILP) 算法 💗

    2024年02月04日
    浏览(37)
  • Java输入任意正整数,判断其以内所有的素数(1000以内的所有素数)

    * 思路1: * 从约数的角度出发 * 5的约数为1,5,和为6 * 13的约数为1,13,和为14 * 17的约数为1,17,和为18 * 18的约数为1,2,3,6,9,18,,和为39 * 所以如果约数的和==i+1;则为素数,否则为偶数 * * 思路2: * 判断约数个数是否大约2 * 2的约数为1,2   约数个数为2 * 11的约数为1,11   约数个

    2023年04月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包