首页 > 编程语言 >质因子分解C++

质因子分解C++

时间:2023-08-07 19:01:12浏览次数:41  
标签:cnt int C++ 因子 分解 printf fac isPrime include

1、题目

质因子分解C++_#include

2、AC代码

#include<iostream>
#include<cmath>
using namespace std;

const int maxn=100010;// 10的5次方即可
bool isPrime(int n)
{
    if(n<=1)return false;
    if(n==2 || n==3)return true;// 特判
    if(n%6!=1 && n%6!=5)return false;// 不在6的倍数两侧的一定不是素数
    for(int i=5;i<=(int)sqrt(n);i+=6)
    {
    // 判断是否是 5,7,11,13的倍数
        if(n%i==0 || n%(i+2)==0)return false;
    }
    return true;
}
int prime[maxn],pNum=0;// 存储素数表,后面需要重复使用
void findPrime()
{
    for(int i=1;i<maxn;i++)
    {
        if(isPrime(i))
        {
            prime[pNum++]=i;
        }
    }
}
// 使用结构体存储素因子
struct factor
{
    int x,cnt;// 素因子、个数
}fac[10];// long int 范围的数的素因子在10个以内
int main()
{
    findPrime();// 调用函数求素数表
    int n,num=0;
    cin>>n;
    // 1和素数需要特判
    if(n==1)printf("1=1");
    else if(isPrime(n))
    {
        cout<<n<<"="<<n;
    }
    else
    {
        printf("%d=",n);
        int temp=(int)sqrt(n);
        for(int i=0;i<pNum&&prime[i]<=temp;i++)
        {
            if(n%prime[i]==0)
            {
                fac[num].x=prime[i];
                fac[num].cnt=0;// 只有一个时,让次数为0,即不显示
                while(n%prime[i]==0)
                {
                    fac[num].cnt++;// 次数+1
                    n/=prime[i];
                }
                num++;
            }
        }
        for(int i=0;i<num;i++)
        {
            if(i>0)printf("*");// 第一个前面无符号
            printf("%d",fac[i].x);
            if(fac[i].cnt>1)
            {
                printf("^%d",fac[i].cnt);
            }
        }
    }
    return 0;
}

标签:cnt,int,C++,因子,分解,printf,fac,isPrime,include
From: https://blog.51cto.com/u_16131726/6996577

相关文章

  • 递推算法例题C++
    1、移动路线【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明......
  • vscode c++食用指南
    准备配置环境为机房的win10.首先你需要下载vscode。可以从官网下载:https://code.visualstudio.com/Download配置编译c++下载完之后安装好,界面全是英文的,正常情况下在一会儿后他会提示你安装中文的扩展,如果没有可以去最左边四个小方块的图标里搜索“Chinese”安装即可。ps:......
  • /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found
    原因使用的gcc没有找到对应的glib库。每个版本的glib都会有改变,所以使用的时候必须匹配。大部分是因为自己编译升级了gcc,再用新的gcc编译程序时没有找到当时匹配的类库。查找原因报错提示很明确了,/lib64/libstdc++.so.6中没有找到GLIBCXX_3.4.26版本内容。正常情况/lib64/lib......
  • STL迭代器适配器reverse_iterator剖析 #C++
    迭代器适配器(iteratoradapters)迭代器适配器是迭代器应用于迭代器的产物,包括insertiterator,reverseiterator和iostreamiterator。迭代器适配器本质是对容器或一般迭代器进行封装,以使其更加符合需求。reverse_iterator概述reverse_iterator可以将一般迭代器的行进方向进......
  • 计算两条直线夹角(C++)
    计算两条直线的锐角可以使用向量的知识来实现。在C++中,我们可以定义一个函数来计算两个向量的夹角,并根据夹角的余弦值来判断角度的大小。以下是一个用C++编写的示例代码:#include<iostream>#include<cmath>usingnamespacestd;structVector{doublex;doubley;......
  • c++中unique_ptr 的使用和理解
    unique_ptr的使用std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递。unique_ptr介绍unique_ptr不共享它的指针。它无法复制到其他unique_ptr,无法通过值传递到函数,也无法用于需要副本的......
  • 【开源三方库】Aki:一行代码极简体验JS&C++跨语言交互
     开源项目 OpenHarmony是每个人的 OpenHarmony 一、简介OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是JavaScript(简称JS)的超集。而Node-API(简称NAPI)是方舟引擎用于封装JS能力为......
  • c++中的weak_ptr的使用与理解
    weak_ptr的使用\(\quad\)关于为什么使用weak_ptr,以及他的使用场景,我们在这篇文章中已经进行了介绍。而对于其具体的使用方法,比如说如何通过weak_ptr访问内存中的数据等操作还未提及,这里做个简单赘述。\(\quad\)有一句话说的很好:weak_ptr就像观测者那样观测资源的使用情况......
  • C++实现高精度减法
    一、问题描述:    高精度算法是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大......
  • 配置 Sublime Text4为 C++ 编辑器的方法
    概述涉及以下插件的安装和配置PackageControl Terminus LSP LSP-clangd clang-format LSP-pyright LSP-json配置sublime安装PackageControl以进行包管理。Terminus安装Terminus以实现sublimetext4内的terminal。绑定快捷键:[ { "keys":[ "ctrl+shift+t" ], "com......