首页 > 其他分享 >【NC14399】素数判断

【NC14399】素数判断

时间:2024-03-17 12:30:47浏览次数:27  
标签:tmp 判断 NC14399 int res 素数 vector 质因数

题目

素数判断

分解质因数

思路

题目很直接,给你一个数,判断其是不是素数,如果是,输出一句话和它本身,如果不是,输出一句话和它的质因数,需要注意的是质因数要从小到大输出。

我们知道,一个素数的质因数就是它本身,所以抛开素数判断,直接对一个数分解质因数就行了。

怎么对一个数分解质因数呢?

可以使用试除法来实现。对于一个大于 1 1 1 的正整数 n n n,如果 n n n 能被 [ 2 , s q r t ( n ) ] [2, sqrt(n)] [2,sqrt(n)] 范围内的任何整数整除,则将因子加入列表,直到 n = 1 n=1 n=1 或者因子的枚举值超出上述范围为止。

然后可以根据得到的质因数列表来判断一个数是不是素数

很直观,如果列表里面只有一个数,那么这个数肯定是素数,否则不是素数

需要注意的是以上的方法得到的质因数列表包含了重复的质因数,所以在输出的时候要加以判断。

代码

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

/**
 * @brief 分解质因数
 *
 * @param x 待分解的数
 * @return vector<int> 质因数列表
 */
vector<int> prime_factors(int x) {
    vector<int> res;
    int d = 2;
    while (x > 1) {
        while (x % d == 0) {
            res.emplace_back(d);
            x /= d;
        }
        d++;
        if (x > 1 && d * d > x) {
            res.emplace_back(x);
            break;
        }
    }
    return res;
}

int main(void) {
    int t = 0, x = 0, k = 0, i = 0;
    cin >> t;
    vector<int> tmp;
    while (t--) {
        cin >> x;
        tmp = std::move(prime_factors(x));
        cout << ((k = tmp.size()) == 1 ? "isprime" : "noprime") << endl;
        cout << tmp[0];
        for (i = 1; i < k; i++) {
            if (tmp[i] != tmp[i - 1]) {
                cout << " " << tmp[i];
            }
        }
        cout << endl;
    }
    return 0;
}

标签:tmp,判断,NC14399,int,res,素数,vector,质因数
From: https://blog.csdn.net/m0_52319522/article/details/136779910

相关文章

  • JAVA 判断与循环
    顺序结构是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行。分支结构1.if语句      (1)if(关系表达式){语句体;}     (2)if(关系表达式){语句体1;}          else  {语句体2;}     (3)if(关系表达式1){语句体1;}       ......
  • python来判断密码强弱-类
    '''设计者:ISDF版本:v1.0日期:2019/4/3''''''设计者:ISDF版本:v2.0日期:2024/4/3'''classPasswordTool:'''密码工具类'''def__init__(self,password):#类......
  • st foc 扇区判断解析
    前言本文为学习st的FOC库笔记,记录FOC库判断扇区的逻辑,并结合其他文章进行对比。关键词:SVPWM扇区判断参考文章:《彻底吃透SVPWM如此简单》图1参考图1,为了便于判断扇区,将αβ坐标系用三条直线分割,分别是:\[β=0\\β=tan(\frac{\pi}{3})*α=\sqrt{3}α\\......
  • shell代码中各种判断方式
    if[-n"$line"];then//判断字符串是否为空,一定要有双引号if["$PIDS"!=""];then//判断字符串是否为空,一定要有双引号if[-f$file];then//判断是否是目录newfile="${file//查询的字符串/替换的字符串}”//字符串替换if[[-f$sourceFile]]&&[[${sourceFi......
  • 酒店评论情感判断模型训练(非神经网络)
    hotel.txt1,距离川沙公路较近,但是公交指示不对,如果是蔡陆线的话,会非常麻烦1,商务大床房,房间很大,床有2M宽,整体感觉经济实惠不错!1,酒店比较新,装潢和设施还不错,只是房间有些油漆味。0,房间设施还可以,但酒店内非常的冷,冬天不推荐入住。0,太令人失望了。太差劲了。0,什么电力......
  • 信息学奥赛一本通:1146:判断字符串是否为回文
    【题目描述】输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。【输入】输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。【输出】如果字符串是回文,输出yes;否则,输出no。【输入样例】abcdedcba【输出样例】yes【参考程序......
  • 两种思路求100到200之间的所有素数
        首先我们来看下素数的定义:除了一和它本身外不能被其他数整除的数。    假如我们要判断i是否是素数,主要的方法是用i对2到(i-1)去求余,如果所有余数都不为零,则说明i就是素数。    那么现在我们来看一下第一种求素数的思路。#include<stdio......
  • 素数之积 - 华为OD统一考试(C卷)
    OD统一考试(C卷)分值:100分题解:Java/Python/C++题目描述RSA加密算法只在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32位正整,请对其进行因数分解,找出是哪两个素数的乘积。输入描述一个正整数num(......
  • 网络架构层_怎么判断IP地址是否在同一个网络
    网络架构层_怎么判断IP地址是否在同一个网络基础的应该是知道差不多了,这儿补充一个几个容易忽略的知识点:子网掩码控制局域网不同IP地址数量:通过查看WindowsIP配置信息可以知道当前连接的局域网内最多有多少个不同的IP地址。子网掩码默认为255.255.255.0掩码,意思就是前面......
  • js判断数组是否包含某个字符串
    方法1Array.includes(): 这个方法返回一个布尔值,表示数组中是否包含指定的元素letlist=['a','ab','abc','d'];console.log(list.includes('abc'))//true方法2Array.indexOf():这个方法返回指定元素在数组中的第一个匹配位置的索引,如果找不到则返回-1。letlist=......