判断素数 一个数的约数 一个整数的幂次约分

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 #include<map>
 5 using namespace std;
 6
 7 //素数测试
 8 bool is_prime(int n)
 9 {
10     for(int i=2; i*i <= n; i++)
11     {
12         if(n%i==0) return false;
13     }
14 }
15
16 //约数枚举
17 vector<int> divisor(int n)
18 {
19     vector<int> res;
20     for(int i = 1; i*i <= n;i++)
21     {
22         if(n%i==0)
23         {
24             res.push_back(i);
25             if(i != n/i)    res.push_back(n/i);
26         }
27     }
28     sort(res.begin(),res.end());
29     return res;
30 }
31
32 // 整数分解
33 map<int,int> prime_factor(int n)
34 {
35     map<int,int>res;
36     for(int i = 2; i*i <= n; i++)
37     {
38         while(n%i==0)
39         {
40             ++res[i];
41             n/=i;
42         }
43     }
44     if(n!=1) res[n]=1;
45     return res;
46 }
47
48 int main()
49 {
50     int n;
51     cin>>n;
52     bool flag=is_prime(n);
53     vector<int> v=divisor(n);
54     map<int,int> m=prime_factor(n);
55     if(flag) cout<<"YES"<<endl;
56     else cout<<"NO"<<endl;
57     for(int i=0;i<v.size();i++)
58     {
59         cout<<v[i]<<" ";
60     }
61     cout<<endl;
62     while(!m.empty())
63     {
64         cout<<m.begin()->first<<" ";
65         cout<<m.begin()->second<<endl;
66         m.erase(m.begin()->first);
67     }
68 } 

原文地址:https://www.cnblogs.com/Yinchen-One/p/8922020.html

时间: 2024-08-09 07:13:21

判断素数 一个数的约数 一个整数的幂次约分的相关文章

HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )

How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12955    Accepted Submission(s): 4490 Problem Description Give you a lot of positive integers, just to find out how many pr

231. Power of Two 342. Power of Four -- 判断是否为2、4的整数次幂

231. Power of Two Given an integer, write a function to determine if it is a power of two. class Solution { public: bool isPowerOfTwo(int n) { return n > 0 ? (n & (n-1)) == 0 : false; } }; 342. Power of Four Given an integer (signed 32 bits), write

一个整数对应二进制中1的个数

#include <stdio.h> #include <stdlib.h> /* 4.统计一个整数对应的二进制数的1的个数. 输入一个整数(可正可负), 输出该整数的二进制包含1的个数, “ctl+ z” 结束. */ int main(){ int number; while (scanf("%d", &number) != EOF){ int num[100] = {0}; int length = 0; if (number < 0) nu

HDOJ(HDU) 2521 反素数(因子个数~)

Problem Description 反素数就是满足对于任意i(0< i < x),都有g(i) < g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大. Input 第一行输入n,接下来n行测试数据 输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b]. Output 输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数. Sample Input 3 2 3

经典算法之判断一个整数是否为素数

经典算法之判断一个整数是否为素数 1 /** 2 判断一个数是否为素数 如: 3 输入: 任意一个数 12 4 输出: 1或0(1表示为素数) 0 5 */ 6 /**************被称为笨蛋的做法************/ 7 #include <stdio.h> 8 9 int main() 10 { 11 12 int i,n; //i为计数数,n为存储用户输入的数 13 14 do //循环检测用户输入的数据>0为合法 15 scanf("%d",&

输入一个整数,判断其是否是2^n,是就输出这个数,不是就输出和它最接近的为2^n的那个整数。

输入一个整数,判断其是否是2^n,若是,输出这 //个数,若不是,输出和它最接近的为2^n的那个整数. 附加源代码1: #include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int input;//键盘输入一个整数input int i,j;//i,j待会儿存放input与左边和右边的为2^n的差值 int m,n;//保存左边,右边的与inout最接近的2^n printf("请

判断一个整数是否为素数(质数)

//判断一个整数是否为素数(质数)//质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数#include <stdio.h>int main(){ int n, i, flag = 0; printf("请输入一个正整数:"); scanf("%d", &n); for (i = 2; i <= n / 2; ++i) { //如果满足以下的条件,他就不是素数 if (n%i == 0) { flag = 1;

键盘输入一个整数,判断是否是素数

/* ============================================================================ Name        : prime.c Author      : zhangsan Version     : Copyright   : Your copyright notice Description : 键盘输入一个整数,判断是否是素数 ============================================

数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)

线性筛 线性筛在数论中起着至关重要的作用,可以大大降低求解一些问题的时间复杂度,使用线性筛有个前提(除了素数筛)所求函数必须是数论上定义的积性函数,即对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数,若a,b不互质也满足的话则称作完全积性函数,下面说明每个筛子是怎么筛的. 最基础的是素数筛,其它三个筛都是以素数筛为前提 素数筛 void get_prime() { int pnum = 0; for(int i = 2;