正题
题目链接:https://www.luogu.com.cn/problem/CF396B
题目大意
定义
- v(n)v(n)v(n)表示≤n\leq n≤n的最大整数
- u(n)u(n)u(n)表示>n>n>n的最小整数
求∑i=2n1v(i)u(i)\sum_{i=2}^n\frac{1}{v(i)u(i)}i=2∑nv(i)u(i)1
解题思路
有式子b−aab=1a−1b\frac{b-a}{ab}=\frac{1}{a}-\frac1babb−a=a1−b1,然后原式子就是12∗3+13∗5+15∗7+...\frac{1}{2*3}+\frac{1}{3*5}+\frac{1}{5*7}+...2∗31+3∗51+5∗71+...
我们让式子中间的乘上一个222
12∗3+13∗5+13∗5+15∗7++...\frac{1}{2*3}+\frac{1}{3*5}+\frac{1}{3*5}+\frac{1}{5*7}++...2∗31+3∗51+3∗51+5∗71++...
5−22∗3+5−33∗5+...\frac{5-2}{2*3}+\frac{5-3}{3*5}+...2∗35−2+3∗55−3+...
12+13−13+15+...\frac{1}{2}+\frac{1}{3}-\frac{1}{3}+\frac{1}{5}+...21+31−31+51+...
所以最后答案就是12−v(n)+u(n)−n−1v(n)u(n)\frac{1}{2}-\frac{v(n)+u(n)-n-1}{v(n)u(n)}21−v(n)u(n)v(n)+u(n)−n−1
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll T,n;
bool notprime(ll n){for(ll i=2;i*i<=n;i++)if(n%i==0)return 1;return 0;
}
int main()
{scanf("%lld",&T);while(T--){scanf("%lld",&n);if(n==1){printf("0/1\n");continue;}ll up=n,dn=n+1;while(notprime(++up));while(notprime(--dn));ll a=up*dn-2*(up+dn-n-1),b=up*dn*2,k=__gcd(a,b);printf("%lld/%lld\n",a/k,b/k);}
}