gcd 环

首先可以特判出 \(15\) 以下的点(其实我还是觉得判 \(12\) 以下就行了)

首先可以发现对于质数 \(p\),若 \(3p>n\),那么以 \(p\) 为最小质因子的数一定不会在答案中。


\[ k=upper\_bound(p+1,p+tot+1,n)-p-1\\ t=upper\_bound(p+1,p+tot+1,n/3)-p-1 \]
可以除去不会使用的质数。

那么答案的上界为 \(n-1-(k-t)\)

接下来我们给出一组构造方案,当明白一组后就会想到更多其他的方案。

考虑到倍数最多的数是 \(2\)\(3\),所以我们用 \(2\)\(3\) 为基础进行构造。

首先我们取出 \(12\)\(2\)\(12\) 可以沟通 \(2\)\(3\)

然后我们将每个可行的质数进行构造,每个数的基本思想是以它的 \(2\)\(3\) 倍为首位,中间连接它的其他倍数。

然后每个质数这样交错进行就可以形成 \(2p-p......-3p-3q-q-......2q\) 的链。

最后要考虑的就是如何将此链与 \(12\) 那头和 \(3\) 的一边拼接在一起。

可以讨论 \(t\) 的奇偶,若为奇数,那么可以先输出 \(3\) 再将 \(3p\) 拼在一起,再连接 \(6\) 再连接 \(2p\),最后连 \(12\)

奇数的情况类似。

构造方法很多,无需(须?)拘泥于一种。

\(code\)

#include<bits/stdc++.h>
#define gc getchar
#define ll long long
using namespace std;
const int N=5e5+1;
template<class I>
inline void read(I &x) {
    int f;
    char c;
    for (f = 1,c = gc(); c < '0' || c > '9'; c = gc()) if (c == '-') f = -1;
    for (x = 0; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + (c & 15), c = gc());
    x *= f;
}
int T,n;
int v[N+7],p[N+7],tot;
void primes(){
    for(int i=2;i<N;i++){
        if(v[i]==0){
            v[i]=i;
            p[++tot]=i;
        }
        for(int j=1;j<=tot;j++){
            if(p[j]>v[i]||p[j]>N/i) break;
            v[i*p[j]]=p[j];
        }
    }
}
void solve(){
    if(n<=7) return puts("3"),puts("2 4 6"),void();
    if(n<=9) return puts("4"),puts("2 4 6 8"),void();
    if(n<=11) return puts("5"),puts("2 4 6 8 10"),void();
    //if(n<=13) return puts("8"),puts("2 4 8 10 12 9 3 6"),void();
    //if(n<=14) return puts("9"),puts("2 4 8 10 14 12 9 3 6"),void();
    int k=upper_bound(p+1,p+tot+1,n)-p-1;
    int t=upper_bound(p+1,p+tot+1,n/3)-p-1;
    cout<<n-1-(k-t)<<endl;
    memset(v,0,sizeof(v));
    v[12]=v[2]=1,printf("12 2 ");
    for(int i=3;i<=t;i++)
        if(i&1){
            v[p[i]*2]=v[p[i]]=1;
            printf("%d %d ",p[i]*2,p[i]);
            for(int j=p[i]*4;j<=n;j+=p[i])
                if(!v[j]) v[j]=1,printf("%d ",j);
            v[p[i]*3]=1,printf("%d ",p[i]*3);
        }
        else {
            v[p[i]*3]=v[p[i]]=1;
            printf("%d %d ",p[i]*3,p[i]);
            for(int j=p[i]*4;j<=n;j+=p[i])
                if(!v[j]) v[j]=1,printf("%d ",j);
            v[p[i]*2]=1,printf("%d ",p[i]*2);
        }
        if(t&1){
            v[3]=1,printf("3 ");
            for(int i=9;i<=n;i+=3)
                if (!v[i]) v[i]=1,printf("%d ",i);
            v[6]=1,printf("6 ");
            for(int i=4;i<=n;i+=2)
                if (!v[i]) v[i]=1,printf("%d ",i);
        }
        else {
            v[4]=1,printf("4 ");
            for(int i=8;i<=n;i+=2)
                if (!v[i]) v[i]=1,printf("%d ",i);
            v[6]=1,printf("6 ");
            for(int i=9;i<=n;i+=3)
                if (!v[i]) v[i]=1,printf("%d ",i);
            v[3]=1,printf("3 ");
        }
    puts("");
}
int main(){
    read(T);
    primes();
    while(T--){
        read(n);
        solve();
    }
    return 0;
}

转载于:https://www.cnblogs.com/Hikigaya/p/11582073.html

### 微游标效应的定义、原理与应用 #### 1. 微游标效应的定义 微游标效应是一种利用光学谐振腔(如微谐振器)中光波干涉现象来提高测量精度的技术。通过引入多个微结构并调整其耦合关系,可以在特定条件下形成一种类似于机械游标的频率调制效果,从而显著提升系统的分辨率和灵敏度[^1]。 #### 2. 微游标效应的工作原理 微游标效应的核心在于多级微之间的相互作用以及由此产生的频谱特性变化。具体来说: - **多级微阵列的设计** 当两个或更多个微被串联或者以某种方式耦合在一起时,它们会共同决定整个系统的传输响应曲线。这种情况下,单个微原有的自由光谱范围 (Free Spectral Range, FSR) 和共振峰位置会被重新分配,最终形成一个新的综合频谱模式。 - **频率倍增机制** 如果适当调节相邻微间的物理参数差异(例如半径大小),可以使得整体系统的有效FSR远小于单一微的情况下的值。这就相当于实现了“放大镜”的功能——即能够更精细地区分输入信号中的细微波动。 - **数学表达形式** 设第一个微的FSR为\( \text{FSR}_1\) ,第二个微的FSR为 \( \text{FSR}_2\) 。当两者满足一定条件 (\( n\cdot\text{FSR}_1=m\cdot\text{FSR}_2,\;n,m\in Z^+\)) 时,则合成后的总FSR可表示为两者的最小公倍数除以其最大公约数的结果: \[ \text{FSR}_{total}=\frac{\text{lcm}(\text{FSR}_1,\;\text{FSR}_2)}{\gcd(n,\;m)} \] #### 3. 微游标效应对实际工程的意义及应用场景 得益于上述独特的性质,微游标效应广泛应用于各类高精密传感领域之中,包括但不限于以下几个方面: - **光纤通信系统中的波长稳定控制** 利用微游标效应构建高性能滤波器件,在保持宽带操作的同时提供极窄带宽的选择能力,这对于密集波分复用(DWDM)网络尤为重要。 - **生物医学成像设备的小型化改进** 结合MEMS技术制造集成化的微型传感器件用于细胞活动监测等领域,既减少了传统大型仪器占用的空间又提高了数据采集效率。 - **境监控平台的数据精准获取** 针对气体浓度探测等任务开发专门优化过的微阵列配置方案,凭借增强版的动态范围表现力捕捉更低限值的目标物质存在状态信息。 ```python import numpy as np from scipy.optimize import fsolve def micro_ring_cursor_effect(fsr_1, fsr_2): """ 计算双微游标效应的有效自由光谱范围(FSR_total) 参数: fsr_1 : float 单位GHz 第一微的自由光谱范围 fsr_2 : float 单位GHz 第二微的自由光谱范围 返回: fsr_total : float 单位GHz 合成后的总自由光谱范围 """ lcm_value = abs(fsr_1 * fsr_2) / np.gcd(int(round(fsr_1)), int(round(fsr_2))) gcd_coefficient = np.gcd(int(round(fsr_1/fsr_2)),int(round(fsr_2/fsr_1))) if round(fsr_1/fsr_2).is_integer() and round(fsr_2/fsr_1).is_integer() else 1. return lcm_value/gcd_coefficient # 示例计算 fsr_1_example = 100e9 # GHz fsr_2_example = 150e9 # GHz print("Effective Free Spectral Range:",micro_ring_cursor_effect(fsr_1_example, fsr_2_example),"Hz") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值