cf396B On Sum of Fractions

Let's assume that

  • v(n) is the largest prime number, that does not exceed n;
  • u(n) is the smallest prime number strictly greater than n.

Find .

Input

The first line contains integer t (1 ≤ t ≤ 500) — the number of testscases.

Each of the following t lines of the input contains integer n (2 ≤ n ≤ 109).

Output

Print t lines: the i-th of them must contain the answer to the i-th test as an irreducible fraction "p/q", where p, q are integers, q > 0.

Examples
Input
2
2
3
Output
1/6
7/30

                

写写1/v(i)u(i)的前几项就能发现规律

i    2   3   4   5

v   2   3   3   5

u   3   5   5   7

如果用个f(i)表示1/v(i)u(i),那么对于一个质数x,有f(2)+f(3)+...+f(x-1)=1/2-1/x

然后在对于一个夹在两质数a,b之间的x,显然从a到x的f值都是a/b,所以就是找到n前后最近的质数,把两分式通分一下就好了

这里我是直接n往前往后Miller-Robin找第一个质数,不过sqrt(n)的暴力应该也能卡过去?

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<queue>
 8 #include<deque>
 9 #include<set>
10 #include<map>
11 #include<ctime>
12 #define LL long long
13 #define inf 0x7ffffff
14 #define pa pair<int,int>
15 #define mkp(a,b) make_pair(a,b)
16 #define pi 3.1415926535897932384626433832795028841971
17 using namespace std;
18 inline LL read()
19 {
20     LL x=0,f=1;char ch=getchar();
21     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
22     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
23     return x*f;
24 }
25 LL mul(LL x,LL n,LL MOD)
26 {
27     LL res=x*n-(LL)((long double) x*n/MOD+0.5)*MOD;
28     while (res<0)res+=MOD;
29     while (res>=MOD)res-=MOD;
30     return res;
31 }
32 LL qpow(LL x,LL n,LL MOD)
33 {
34     x=(x%MOD+MOD)%MOD;
35     LL p=x,con=1;
36     while (n)
37     {
38         if (n&1)con=mul(con,p,MOD);
39         p=mul(p,p,MOD);
40         n>>=1;
41     }
42     return con;
43 }
44 bool witness(LL a,LL b)
45 {
46     if (a==b)return true;
47     LL s=b-1;
48     int t=0;
49     while (!(s&1))s>>=1,t++;
50     LL x=qpow(a,s,b);
51     if (x==1)return 1;
52     while (t--)
53     {
54         if (x==b-1)return true;
55         x=mul(x,x,b);
56         if (x==1)return false;
57     }
58     return false;
59 }
60 bool isprime(LL x)
61 {
62     if (x==0||x==1)return false;
63     static int p[]={2,3,5,7,11,13,17,19,23,29,31};
64     for (int i=0;i<=10;i++)
65         if (!witness(p[i],x))return false;
66     return true;
67 }
68 inline LL gcd(LL a,LL b)
69 {
70     if (a<b)swap(a,b);
71     return b==0?a:gcd(b,a%b);
72 }
73 int main()
74 {
75     int T=read();
76     while (T--)
77     {
78         LL x=read(),y,z,t,ans1,ans2;
79         for (y=x;y>=2;y--)if (isprime(y))break;
80         for (z=x+1;z<=1e9+7;z++)if (isprime(z))break;
81         //ans=1/2-1/y+(x-y+1)*y/z
82         ans1=y*z-2*z+2*x-2*y+2;ans2=2*y*z;
83         t=gcd(ans1,ans2);ans1/=t;ans2/=t;
84         printf("%lld/%lld\n",ans1,ans2);
85     }
86 }
cf396B

 

转载于:https://www.cnblogs.com/zhber/p/7283426.html

<think>嗯,用户的问题是关于在化学模拟中计算或验证质量分数之和为零的情况,涉及氧气、水蒸气、甲烷、二氧化碳和氮气。首先,我需要确认质量分数之和为零的具体含义。通常,质量分数总和应该为1,所以用户可能是指某种守恒条件或者误差需要趋近于零的情况? 接下来,我需要回顾质量分数的基本概念。质量分数是每种物质质量占总质量的比值,所以正常情况下它们的和应该是1。如果用户提到和为0,可能是在某种特定的守恒方程中,比如在化学反应中某种元素的平衡,或者模拟中的误差需要调整到接近零? 然后,用户提到的物种包括O₂、H₂O、CH₄、CO₂和N₂。这些气体在燃烧或化学反应中常见,可能涉及燃烧模拟。例如,甲烷燃烧会产生二氧化碳和水。氮气通常是惰性的,但在高温下可能参与反应。不过,用户的问题是关于质量分数的计算或验证,可能需要考虑这些物质的质量守恒。 接下来,我需要考虑如何计算各物质的质量分数,并确保它们的总和符合预期。例如,在燃烧模拟中,初始条件可能设定燃料和氧化剂的质量分数,燃烧后生成物的质量分数需要重新计算,总和应保持为1。如果出现误差,可能需要检查计算过程中的单位转换、化学反应式的配平,或者数值方法的误差。 可能的步骤包括:1)确定每个物质的质量分数;2)将它们相加;3)验证总和是否接近预期值(1或0,根据具体情况);4)若存在偏差,分析来源,如舍入误差、化学反应式的配平错误,或数值模拟中的离散化误差。 另外,用户提到的“质量分数之和为零”可能有特殊背景,比如在某种归一化处理后的方程中,或者涉及扩散方程中的通量平衡。需要进一步确认上下文,但根据现有信息,应假设是常规的质量守恒问题,总和应为1,用户可能希望验证模拟中总和是否接近1,误差是否趋近于零。 在编写回答时,需要明确步骤,引导用户检查每个物质的质量分数计算是否正确,总和是否接近预期,并提供可能的误差来源和解决方法。同时,结合用户提到的具体物种,可能需要考虑它们的摩尔分数与质量分数的转换,使用正确的摩尔质量和质量分数公式。 最后,生成相关问题时要围绕质量分数的计算、误差分析、守恒方程的应用以及特定模拟场景中的注意事项展开,帮助用户深入理解问题。</think>### 化学模拟中质量分数之和的验证方法 在化学模拟中,验证组分质量分数之和是否满足守恒条件(通常为1或0)是确保数值稳定性的关键步骤。针对氧气($O_2$)、水蒸气($H_2O$)、甲烷($CH_4$)、二氧化碳($CO_2$)和氮气($N_2$)的体系,具体步骤如下: 1. **质量分数定义** 每种物质的质量分数为: $$ Y_i = \frac{m_i}{\sum_{j=1}^N m_j} $$ 其中$m_i$为第$i$种物质的质量,$N$为组分总数[^1]。 2. **守恒条件验证** 若模拟要求质量分数之和为零(如特定边界条件或误差控制),需检查: - 数值舍入误差是否累积 - 化学反应源项是否严格满足质量守恒 - 边界通量计算是否对称 3. **示例计算** ```python def check_mass_fraction(Y): total = sum(Y.values()) return abs(total) < 1e-6 # 设定阈值验证是否接近零 species = {"O2": 0.2, "H2O": -0.1, "CH4": 0.3, "CO2": -0.4, "N2": 0.0} print("质量守恒验证:", check_mass_fraction(species)) ``` 4. **特殊场景处理** 当出现负质量分数时需注意: - 化学反应机制是否完整 - 湍流-化学反应耦合模型是否合理 - 时间步长是否过大导致数值震荡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值