PAT A1059

标签(空格分隔): PAT


解题思路 :先打印出素数表。利用结构体数组来存贮质因子的值和个数

strcut factor{
int x; //值
int cnt; //个数
}fac[20];
  • 如果i是x的质因子,就令fac[index].x = i(index是某个下标), fac[index].cnt = 0,然后 n = n / i。若又遇到i是x的质因子,则cnt++。
  • 进行完上述操作后,n != 1,则说明n还有一个大于sqrt(n)的质因子(可能就是sqrt(n)),我们需要加入这个值到fac[index]中,在将fac[index].cnt设为1;
#include <cstdio>
#include <math.h> const int maxn = 100010;
bool is_prime(int n) {
if(n == 1) return false;
int sqr = (int)sqrt(1.0 * n);
for(int i = 2; i <= sqr; i++) {
if(n % i == 0) return false;
}
return true;
}
int prime[maxn], pNum;
void Find_Prime() {
for(int i = 1; i < maxn; i++) {
if(is_prime(i) == true){
prime[pNum++] = i;
}
}
}
struct factor {
int x, cnt;
}fac[10]; int main() {
Find_Prime();
int n, num = 0;
scanf("%d", &n);
if (n == 1) printf("1=1");
else {
printf("%d=", n);
int sqr = (int)sqrt(1.0 * n);
for(int i = 0; i < pNum; i++) {
if(n % prime[i] == 0) {
fac[num].x = prime[i];
fac[num].cnt = 0;
while(n % prime[i] == 0) {
fac[num].cnt++;
n /= prime[i];
}
num++;
}
if(n == 1) break;
}
if(n != 1) {
fac[num].x = n;
fac[num].cnt = 1;
}
for(int i = 0; i < num; i++) {
if(i > 0) printf("*");
printf("%d", fac[i].x);
if(fac[i].cnt > 1) {
printf("^%d", fac[i].cnt);
}
}
}
return 0;
}

启示 :边写边测试,我写过用埃氏筛法得到素数表的时候,发现最后的结果是错的,

结果我验证发现我的素数表是错误的,但埃氏筛法肯定是没有写错了,最后为什么素数表是错的,原因我也不知道,但是这可以为我后来做题提供经验,写出一个模块就验证一下功能。

PAT A1059的更多相关文章

  1. PAT_A1059#Prime Factors

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

  2. PAT甲级——A1059 Prime Factors

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...

  3. PAT甲级题解分类byZlc

    专题一  字符串处理 A1001 Format(20) #include<cstdio> int main () { ]; int a,b,sum; scanf ("%d %d& ...

  4. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  5. PAT Judge

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...

  6. PAT/字符串处理习题集(二)

    B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...

  7. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  8. PAT 1040. 有几个PAT(25)

    字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问 ...

  9. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

随机推荐

  1. Kde桌面的Mac化

    KDE->Mac \(Mac\) 的审美可以说是很成熟了,确实让人很喜欢啊!于是不由得想弄一个 \(Mac\) 风的桌面. 先放张图吧: 效果还蛮不错的哇. \(Mac\) 原生的壁纸下载链接: ...

  2. springmvc定时任务

    1.SpringMVC.xml文件加这个 <task:annotation-driven scheduler="qbScheduler"/> <task:sche ...

  3. GIT导出差异版本更新的文件列表

    之前写了一篇SVN导出差异版本更新的文件列表 这次写git如何导出差异化版本文件列表 查找了一番,发现git diff这个命令 $ git diff 2da595c daea1d6 --name-on ...

  4. js var 以及 let 的差异

    例子 window.checklist=[{"boardname":"motor_board","cur":"1.0.0" ...

  5. 移动app的体验性测试

    最近用户体验被提的次数较多,大家可能会遇到这种情况,客户“你们软件功能没问题了,但就是感觉不好用,能不能优化一下,做的高大上些”,作为一个有经验的测试工程师这个时候你就应该知道问题在于用户体验了 关于 ...

  6. Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures

    1的个数-块的个数+多减的个数+flag 多减的只会在一个循环末尾出现 #include <bits/stdc++.h> using namespace std; #define rep( ...

  7. C语言 九九乘法表

    #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { int i,j,k; ...

  8. 手机上 input submit ios和andirod样式不统一

    -webkit-appearance:none;

  9. Vue.js错误: Maximum call stack size exceeded

    这几天正自学Vue, 用eggjs + vue 采用前后分离,写一个网站练练手. 增加了一个商品详情页 Detail.vue的时候,点击进入Detail.vue的时候,页面显示空白,打开浏览器调试工具 ...

  10. C#异步(下)

    上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的表述,我们称async\await之前的异步为“旧异步”,async\aw ...