这是一道素数因子分解的问题:

1.先打印素数表出来,以便后期使用,素数表的大小就是10^5级别就可以,因为输入的数是long int(即就是int而已),大小最大21亿(10^10量级的),我们这里素数范围只需要sqrt(10^10)=10^5就行

(使用2-根号n依此取模的方式  或者  使用筛选法),我下面是使用筛选法直接打印素数表的

2.在sqrt_n范围的素数逐个进行一到多次取模运算判断是否是否为因子以及因子的阶数,并将结果存在struct factor的数组fac中

3.如若最后剩下的n不是1(因为n不断取模后,最后如果在sqrt_n范围内就能解决,n就会变为1,不需要再操作什么),即将n放入struct factor的数组fac中,阶数为1

4.最后就是按照格式要求打印就行,现在用着printf,scanf怎么感觉比以前cin,cout还要舒服,不知道是怎么回事哈哈

小坑:1.素数表是从2开始的,所以打印,判断素数什么的循环都要从i=2开始,不然会陷入死循环

   2.第三部判断n为1,不是n为0

#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int isprime[]; //0是1不是 void find_prime(int n){
for(int i=;i<=n;++i){ //从2开始
if(isprime[i]==){
for(int j=i+i;j<=n;j+=i){
isprime[j]=;
}
}
}
} struct factor{
int f;
int p;
}fac[]; int main(){
freopen("in.txt","r",stdin); int input;
scanf("%d",&input);
if(input==){ //特殊情况为1
printf("1=1");
return ;
}
int n=input; int sqrt_n=sqrt(n);
find_prime(sqrt_n); int posi=;
for(int i=;i<=sqrt_n;++i){ //一定要从2开始
if(isprime[i]==){
int count=;
while(n!= && n%i==){
count++;
n/=i;
}
if(count!=){
fac[posi].f=i;
fac[posi].p=count;
posi++;
}
if(n==)
break;
}
}
if(n!=){ //不等于1
fac[posi].f=n;
fac[posi].p=;
}
printf("%d=",input);
for(int i=;;++i){
if(fac[i].p==)
break;
if(i!=)
printf("*");
printf("%d",fac[i].f);
if(fac[i].p!=)
printf("^%d",fac[i].p);
} return ;
}

PAT_A1059的更多相关文章

  1. PAT_A1059#Prime Factors

    Source: PAT A1059 Prime Factors (25 分) Description: Given any positive integer N, you are supposed t ...

随机推荐

  1. LODOP设置某打印项锁定下边距

    LODOP中的打印项定位都是按照top值(顶边距),left(左边距)来决定的 ,不能直接设置某打印项的下边距.此外,打印项的位置还受PRINT_INTA的前两个整体偏移值,打印机可打区域的影响.该文 ...

  2. [LeetCode] 317. Shortest Distance from All Buildings 建筑物的最短距离

    You want to build a house on an empty land which reaches all buildings in the shortest amount of dis ...

  3. nginx启动命令以及与配置systemctl

    一.配置systemctl之前的启动方式 进入sbin目录下执行以下命令: 启动nginx的命令为 /usr/local/nginx/sbin/nginx 3 停止nginx的命令为 /usr/loc ...

  4. Java之变量和数据类型

    变量 什么是变量 变量就是初中的代数的概念.例如一个简单的方程,x,y都是变量 y=x+1 在Java中,变量分为两种:基本类型的变量和引用类型的变量 在Java中,变量必须先定义后使用,在定义变量的 ...

  5. mysql查询之分数排名

    编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同 +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 ...

  6. Influx Sql系列教程二:retention policy 保存策略

    retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建re ...

  7. LeetCode 290. 单词规律(Word Pattern) 41

    290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern 和一个字符串 str,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如,pattern ...

  8. [转帖]UID卡、CUID卡、FUID卡、UFUID卡的区别及写入方式

    UID卡.CUID卡.FUID卡.UFUID卡的区别及写入方式   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  9. Apache Kafka Connect - 2019完整指南

    今天,我们将讨论Apache Kafka Connect.此Kafka Connect文章包含有关Kafka Connector类型的信息,Kafka Connect的功能和限制.此外,我们将了解Ka ...

  10. jQuery的基础总结

    **本篇只列出零碎的jQuery基础知识点,个人记录自己的学习进度,无序排列,谨慎查看.** 1.jQuery入口函数的四种写法2.jQuery与JS遍历数组的区别3.jQuery符号冲突问题4.jQ ...