8.I - 分数

Background

万人血书 KHIN 完成女装 flag(1/10000) →→ 万人血书 KHIN 完成女装 flag(2/10000)(1/5000) →→ 万人血书 KHIN 完成女装 flag(2/5000)(1/2500) →→ 万人血书 KHIN 完成女装 flag(2/2500)(1/1250) →→ 万人血书 KHIN 完成女装 flag(2/1250)(1/625) ⋯⋯ 以此类推,在可以约分的情况下,“万人血书”很快就能完成。

Description

“�x 人血书”的过程可以看成一个函数 �(�)f(x):

有一个 0�x0​ 的分数。重复以下步骤直到这个分数为 11:

  1. 分子 +1+1。
  2. 如果这个分数可以约分,约分到最简形式。

现在小 D 给了你 �T 组数据,每组数据都是给定 �n,求在 1≤�≤�1≤x≤n 的情况下 �(�)f(x) 的最大操作次数。

但是他太菜了,不会,你能帮帮他吗?

Input

第一行一个正整数 �T。

接下来 �T 行,每行一个正整数 �n。

Output

共 �T 行,每行一个整数 �s 表示在 1≤�≤�1≤x≤n 的情况下 �(�)f(x) 的最大操作次数。

Sample 1

InputcopyOutputcopy
5
1
2
5
8
114514
1
2
5
7
114493

Hint

样例解释

�(1)=1,�(2)=2,�(3)=3,�(4)=3,�(5)=5f(1)=1,f(2)=2,f(3)=3,f(4)=3,f(5)=5。

我也想把更大的 �(�)f(x) 列出来,但是地方不够了。

数据范围

对于全部数据,1≤�≤5×1051≤T≤5×105,1≤�≤2×1061≤n≤2×106。

Subtask 中没填的部分表示和全部数据的范围一样。

子任务编号�T 的范围�n 的范围特殊性质分值
Subtask 11�≤3T≤3�≤10n≤101010
Subtask 22�≤5T≤5�≤103n≤1033030
Subtask 33�n 为质数1010
Subtask 44�≤5×105n≤5×1052020
Subtask 553030

#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
#define endl '\n'
#define ll long long
#define int ll
using namespace std;
const int N=2e6+7;
int vis[N];
vector<int> v;
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int T;
	cin>>T;
	for(int i=2;i*i<N;i++)
	{
		if(vis[i]==1) continue;
		for(int j=i*i;j<N;j+=i)
		{
			vis[j]=1;
		}
	}
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=n;;i--)
		{
			if(vis[i]!=1) 
			{
				cout<<i<<endl;
				break;
			}
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值