筛选法 || POJ 1356 Prime Land
#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的更多相关文章
- POJ 1365 Prime Land(数论)
题目链接: 传送门 Prime Land Time Limit: 1000MS Memory Limit: 10000K Description Everybody in the Prime ...
- [POJ 1365] Prime Land
Prime Land Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3211 Accepted: 1473 Descri ...
- POJ 1365 Prime Land(整数拆分)
题意:感觉题意不太好懂,题目并不难,就是给一些p和e,p是素数,e是指数,然后把这个数求出来,设为x,然后让我们逆过程输出x-1的素数拆分形式,形式与输入保持一致. 思路:素数打表以后正常拆分即可. ...
- 筛选法 || 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, ...
- POJ 2689 Prime Distance (素数筛选法,大区间筛选)
题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...
- ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)
何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...
- poj 2262 Goldbach's Conjecture(素数筛选法)
http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 3978 Primes(素数筛选法)
题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
随机推荐
- 未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyT
VS2008开发的网站,本地测试没问题,上传到服务器就出错,提示: 引用内容未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, C ...
- Java调用未被Static修饰的本类方法
public class Dy { public static void main(String[] args){ int a=6; int b=5; int result=0; Dy dy=new ...
- CodeForces 719B Anatoly and Cockroaches (水题贪心)
题意:给定一个序列,让你用最少的操作把它变成交替的,操作有两种,任意交换两种,再就是把一种变成另一种. 析:贪心,策略是分别从br开始和rb开始然后取最优,先交换,交换是最优的,不行再变色. 代码如下 ...
- Oracle UNDO Tablespace size & Table Size
Table Space Query select SEGMENT_NAME,bytes/1024/1024,a.* from dba_segments a UNDO Table Space Size ...
- c# 组件无法下断点
1. c#组件 2.断点能下,且运行中断点本身显示正常(正常实心红点,不是白底红圈) 3.运行中无法进入组件 4.主程序中,组件的实例无法被观测到,调试显示:无法计算得到这个对象 , 但是程序能运行 ...
- 黑客攻防技术宝典web实战篇:攻击访问控制习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 一个应用程序可能通过使用 HTTP Referer 消息头实施访问控制,但它的正常行为并没 ...
- 7天学完Java基础之5/7
接口 接口就是一种公共的规范标准 是一种引用数据类型 定义格式 public interface 接口名称{} java7 中接口可以包含常量,抽象方法:Java8 还可以额外包含默认方法,静态方法: ...
- jQuery笔记之工具方法extend插件扩展
jQuery工具方法 $.extend()插件扩展(工具方法) $.fn.extend()插件扩展(实例方法) 浅度克隆.深度克隆 两个方法基本是一样的,唯一不同的就是调用方式不一样 -------- ...
- print打印
print打印输出的优点是简单直接粗暴有效,就是用print()把可能有问题的变量打印出来看看缺点是将来还得删掉它,想想程序里到处都是print(),运行结果也会包含很多垃圾信息 __________ ...
- two_sum问题
def two_sum(li, target): for i in range(len(li)): for j in range(i+1, len(li)): if li[i] + li[j] == ...