集训队每周一赛 2020-05-27(打表+二分+素数+字符串进制)

A 好数(Div.2)

题目

假如整数n除以m,结果是无余数的整数,那么我们称 m 就是 n 的因子。
假如一个 他的因子只包含2 、3 、5 ,我们则称 x 是一个好数。
小A 想知道大于或等于 n 的最小的好数是多少?

输出描述

第1行:一个数 T ,表示后面用作输入测试的数的数量。(1<=T<=10000)
第2 ~ T+1 行:每行 1个数 n (1<=n<=1e18)

输入描述

共 T 行,每个样例输出 1 个数,输出大于等于n 的最小的只包含因子 2、3 、5 的 数

示例:

Input:
4
1
13
17
22
Output:
2
15
18
24

题解

打表用数组存储只包含因子 2、3 、5 的 数,排序后二分lower_bound(a,a+cnt,n)找到第一个大于或等于n的数。数组存储的第一个数是1,可以去掉。

#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int t,cnt;
ll n,pos,N=1e18,a[1000005];
void dabiao()
{
   
	cnt=0;
	for(ll i=1; i<N; i*=2)
	{
   
		for(ll j=1; j*i<N; j*=3)
		{
   
			for(ll k=1; i*j*k<=N; k*=5)
				a[cnt++]=i*j*k;
		}
	}
	a[0]=-1;
	sort(a,a+cnt);
}
int main()
{
   
	cin>>t;
	dabiao();
	while(t--)
	{
   
		cin>>n;
		pos=lower_bound(a,a+cnt,n)-a;
		cout<<a[pos]<<endl;
	}
	return 0;
}

B 哥德巴赫猜想(Div.2)

题目

哥德巴赫猜想可以表述为:任意一个大于等于4 的偶数都可以写成两个质数之和。
现在给定一个偶数 n ,请你将 n 分解成两个质数 p1,p2 , 可能存在多种分解方
式,请输出 min(p1,p2) 最小的一种,即 10 可分解成 5 和 5 ,但在本题你应该输
出 3 和 .7

输入描述:

一个偶数n(4<=n<=1e5)

输出描述:

输出一个形如 n=p1+p2 的表达式,其中 p1,p2 为质数,且在 n 的所有分解方
案中 min(p1,p2) 是最小的

示例:

Input:
10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值