英文题读不懂题==质数幂的形式给你一个数 把它减一再用质数幂的形式表示出来
*解法:质数从小到大模拟除一遍,输入有点别扭
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define SZ 33005
char a[100];
bool isprime[SZ];
int primes[SZ], num[SZ];
int cnt;
void prime(int n)
{
memset(isprime, 1, sizeof(isprime));//1->是素数,0->不是素数
memset(primes, 0, sizeof(primes));
isprime[0] = 0;
isprime[1] = 0;
cnt = 0;
for(int i = 2; i <= n; i++)//========高亮!i<=n!高亮=========
{
if(!isprime[i]) continue;
primes[cnt++] = i;
for(int j = i * i ; j <= n; j += i)//========高亮!j<=n!高亮=========
isprime[j] = 0;
}
//cnt:n以内有cnt个质数
return;
}
int main()
{
while(1)
{
int n = 0, tmp1 = 0, tmp2 = 0, ans = 1;
gets(a);
int len = strlen(a);
for(int i = 0; i <= len; i++)
{
if(a[0] == '0') return 0;//等于0的时候终止 可以直接写return 0
if(a[i] == ' ' || a[i] == '\0')
{
if(n % 2 == 1)
{
for(int j = 0; j < tmp2; j++)
ans *= tmp1;
tmp1 = 0, tmp2 = 0;
}
n++;
if(a[i] == ' ') continue;
else break;
}
if(n % 2 == 0) tmp1 = tmp1 * 10 + a[i] - '0';
else tmp2 = tmp2 * 10 + a[i] - '0';
}
ans -= 1;
prime(ans);//求ans内的质数
memset(num, 0, sizeof(num));
int j = 0;
while(j < cnt)
{
if(ans % primes[j] == 0)
{
num[j]++;
ans /= primes[j];
}
else j++;
if(ans == 1) break;
}
for(int i = cnt - 1; i >= 0; i--)
{
if(!num[i]) continue;
printf("%d %d ", primes[i], num[i]);
}
printf("\n");
}
return 0;
}

  

筛选法 || POJ 1356 Prime Land的更多相关文章

  1. POJ 1365 Prime Land(数论)

    题目链接: 传送门 Prime Land Time Limit: 1000MS     Memory Limit: 10000K Description Everybody in the Prime ...

  2. [POJ 1365] Prime Land

    Prime Land Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3211   Accepted: 1473 Descri ...

  3. POJ 1365 Prime Land(整数拆分)

    题意:感觉题意不太好懂,题目并不难,就是给一些p和e,p是素数,e是指数,然后把这个数求出来,设为x,然后让我们逆过程输出x-1的素数拆分形式,形式与输入保持一致. 思路:素数打表以后正常拆分即可. ...

  4. 筛选法 || POJ 3292 Semi-prime H-numbers

    5,9,13,……叫H-prime 一个数能且仅能由两个H-prime相乘得到,则为H-semi-prime 问1-n中的H-semi-prime有多少个 *解法:vis初始化为0代表H-prime, ...

  5. POJ 2689 Prime Distance (素数筛选法,大区间筛选)

    题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...

  6. ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)

    何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...

  7. poj 2262 Goldbach's Conjecture(素数筛选法)

    http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total ...

  8. POJ 3978 Primes(素数筛选法)

    题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...

  9. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

随机推荐

  1. C++实现合并两个已经排序的链表

    /* * 合并两个已经排序的链表.cpp * * Created on: 2018年4月11日 * Author: soyo */ #include<iostream> using nam ...

  2. 【废弃】JavaScript 控制类语法

    创建: 2017/10/07 完成: 2017/10/07 结束: 2019/02/19 把所有内容迁出到[JavaScript 基础]并将本博文归档到[废弃] return前加一个空格, 使所有单元 ...

  3. 洛谷 - P1309 - 瑞士轮 - 归并排序

    https://www.luogu.org/problemnew/show/P1309 一开始写的直接快排没想到真的TLE了. 想到每次比赛每个人前移的量不会很多,但是不知从哪里开始优化. 搜索一下原 ...

  4. 几题LCS后的小总结

    先得理解最长上升子序列吧,这还是非常简单的. 然后就是要真正理解LCS: 真正理解源于做题,做题就像查漏补缺一样,你总有不会的地方. 非常彻底地理解该图(还是去做题啦) = =瞎几把乱说有两种问题 [ ...

  5. Window下完全卸载删除Nodejs

    如何从Windows中删除Node.js: 1.从卸载程序卸载程序和功能. 2.重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程). 3.寻找这些文件夹并删除它们(及其内容)(如果还有). ...

  6. linux虚拟机时间不准的问题

    如果时区不准, 使用tzselect命令(timezone选择),选择北京时间.然后把输出的命令写入/etc/profile.d/time.sh里. 然后用crontab写定时任务,每天执行一次. 3 ...

  7. Jmeter安装说明

    本文主要介绍Jmeter工具的安装 一.安装JDK 1.下载jdk,到官网下载jdk,下载jkd1.8即可,地址:http://www.oracle.com/technetwork/java/java ...

  8. websocket实现群聊

    server # @File: 群聊 from flask import Flask, render_template, request from geventwebsocket.handler im ...

  9. (022)[工具软件]图片浏览 JPEGView

    JPEGView是一款小巧绿色快速的图像浏览工具,并且支持全屏或窗口模式.主页地址: https://sourceforge.net/projects/jpegview/JPEGView软件小巧,但功 ...

  10. 深入理解spark streaming

    spark streaming是建立在spark core之上的,也就说spark streaming任务最终执行还是依赖于RDD模型.在转化成最终的RDD模型执行前,spark streaming主 ...