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 ...
随机推荐
- SpringBoot2+Druid+JdbcTemplate+MySql实现增删改查
1.配置pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- win7蓝屏死机0x0000003B错误蓝屏故障解决
win7蓝屏死机0x0000003B错误蓝屏故障解决 刚才一个朋友问我:电脑蓝屏了怎么办. 我问他要了电脑的截图,自己看了错误代码:0x0000003B 搜索资料,查询了一番.都是说电脑中病毒或者是系 ...
- STL源码剖析——序列式容器#2 List
list就是链表的实现,链表是什么,我就不再解释了.list的好处就是每次插入或删除一个元素,都是常数的时空复杂度.但遍历或访问就需要O(n)的时间. List本身其实不难理解,难点在于某些功能函数的 ...
- pychram 中 Terminal 中 git log 中文乱码解决办法
添加环境变量 set LESSCHARSET=utf-8 执行以下命令 git config --global core.quotepath false 不成功执行以下命令 git config -- ...
- PAT(B) 1045 快速排序(C)
题目链接:1045 快速排序 (25 point(s)) 参考博客:1045 快速排序 (25 point(s))繁星蓝雨 题目描述 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一 ...
- VC6.0- C语言-winsocket-警告warning C4761
错误介绍 操作系统:windows10 IDE:VC6.0 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 警告类型:警告warning C4761 integral size misma ...
- Python Web开发技术栈
- golang数组
- Scala 函数入门之过程、lazy值和异常
Scala 过程 在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit.这样的函数就被称之为过程.过程通常用于不需要返回值的函数. 过程还有 ...
- AS3事件类型
Event事件类型: ACTIVATE 激活事件 DEACTIVATE 对象休眠事件 ADDED 可视对象添加事件 ADDED_TO_STAGE 可视对象添加到舞台事件 REMO ...