1059. Prime Factors (25)
2015-09-04 21:19
351 查看
题目链接:http://www.patest.cn/contests/pat-a-practise/1059
题目:
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1* p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi's
are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is
1 and must NOT be printed out.
Sample Input:
Sample Output:
分析:
注意边界条件1=1的情况
AC代码:
截图:
没有注意到1=1的情况下案例3出错。
后来:
——Apie陈小旭
题目:
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1* p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi's
are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is
1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
分析:
注意边界条件1=1的情况
AC代码:
#include<stdio.h> using namespace std; bool mark[100001]; int prime[100001]; int primeSize; void init(){ primeSize = 0; for (int i = 2; i <= 100000; i++){ if (mark[i] == true)continue; prime[primeSize++] = i; if (i >= 1000)continue; for (int j = i * i; j <= 100000; j += i){ mark[j] = true; } } } int main(){ freopen("F://Temp/input.txt", "r", stdin); init(); int n1,n; scanf("%d", &n1); n = n1; if (n == 1){//*point printf("1=1\n"); return 0; } int ansPrime[30]; int ansSize = 0; int ansNum[30]; for (int i = 0; i < primeSize; i++){ if (n % prime[i] == 0){ ansPrime[ansSize] = prime[i]; ansNum[ansSize] = 0; while (n % prime[i] == 0){ ansNum[ansSize] ++; n /= prime[i]; } ansSize++; if (n == 1)break; } } if (n != 1){ ansPrime[ansSize] = n; ansNum[ansSize++] = 1; } printf("%d=", n1); for (int i = 0; i < ansSize;i ++){ if (i == ansSize - 1){ if (ansNum[i] == 1)printf("%d\n", ansPrime[i]); else printf("%d^%d\n", ansPrime[i], ansNum[i]); } else{ if (ansNum[i] == 1)printf("%d*", ansPrime[i]); else printf("%d^%d*", ansPrime[i], ansNum[i]); } } return 0; }
截图:
没有注意到1=1的情况下案例3出错。
后来:
——Apie陈小旭
相关文章推荐
- idea 快捷键
- 自定义NSLog
- Ubuntu 下使用minicom 的配置过程
- 断舍离2
- 数组 指针杂记
- hdoj3501Calculation 2【欧拉函数】
- atlassian JIRA 插件开发(六) — JIRA系统的插件体系,总体一瞥
- 序列加密
- 搭建web项目结合spring+cxf的webservice服务
- 1058. A+B in Hogwarts (20)
- 如何去掉Navigation下方的分割线
- 实现一颗二叉树,检查二叉树是否平衡(java实现)
- WEB前段助手 FeHelper
- 使用Keepalived构建高可用热备
- 百练2775 九度 1114
- layoutSubviews的使用总结
- loadrunner测试sql语句性能
- 【HDU3360】【二分匹配】
- 自定义视图
- 利用归并排序求逆序对