PAT_A1059
这是一道素数因子分解的问题:
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的更多相关文章
- PAT_A1059#Prime Factors
Source: PAT A1059 Prime Factors (25 分) Description: Given any positive integer N, you are supposed t ...
随机推荐
- css3逐帧动画
写css3动画的时候,我们经常用到animation来实现,默认情况下,animation是属于连贯性的ease动画.我们熟悉的animation动画有ease.ease-in.ease-out.li ...
- [LeetCode] 216. Combination Sum III 组合之和 III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- [LeetCode] 803. Bricks Falling When Hit 打击砖块掉落
We have a grid of 1s and 0s; the 1s in a cell represent bricks. A brick will not drop if and only i ...
- 主机与虚拟机Oracle VM VirtualBox不能拖动复制的解决办法
先将虚拟机系统关机,然后打开Oracle VM VirtualBox管理器: 第一步: 常规高级里共享粘贴板已经选中双向 第二步: 虚拟机设置-存储-控制器SATA(或IDE)-勾选"使用主 ...
- 最新 识装java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 识装等10家互联网公司的校招Offer,因为某些自身原因最终选择了 识装.6.7月主要是做系统复习.项目复盘.LeetCo ...
- 乐橙平台大华监控Android端实时预览播放
一.初始化 首先我们需要到乐橙开放平台下载android对应的开发包,将sdk中提供的jar和so文件添加到项目中: 二.获取监控列表 监控列表我们是通过从自家后台服务器中获取的,这个自己根据需要调整 ...
- 【Django单元测试方法】
一.前言/准备 测Django的东西仅限于在MTV模型.哪些可以测?哪些不可以. 1.html里的东西不能测.①Html里的HTML代码大部分都是写死的②嵌套在html中的Django模板语言也不能测 ...
- TCP协议的11种状态及其变化过程?传输的内容又是什么?
在TCP的11种状态变迁中,我们需要用到TCP头部的三个标志位: 1.SYN,SYN=1表示这是一个连接请求报文或者连接接受报文 2.ACK,ACK=1,表示确认号生效 3.FIN,FIN=1表示发送 ...
- 【转帖】你知道X86构架,你知道SH构架吗?
你知道X86构架,你知道SH构架吗? https://www.eefocus.com/mcu-dsp/363100 前面我们讲到了 8 位处理器,32 位处理器,以及 X86 构架,那么除了这些还 ...
- Java开发笔记(一百零五)几种定时器线程池
前面介绍了普通线程池的用法,就大多数任务而言,它们对具体的执行时机并无特殊要求,最多是希望早点跑完早点出结果.不过对于需要定时执行的任务来说,它们要求在特定的时间点运行,并且往往不止运行一次,还要周期 ...