zoukankan      html  css  js  c++  java
  • [数学]luogu P4296 [AHOI2007]密码箱

    题面

    https://www.luogu.com.cn/problem/P4296

    分析

    移项得x^2-1=0(mod n) 即平方差公式

    即存在 x,x-2 ,其中有一个数满足为n的倍数

    设 kab=kn 满足(ka±2)%b==0

    在根号n范围内枚举a,记录合法a,b

    则时间复杂度为$O(2sqrt{n})$

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    const int N=5e5;
    ll n,ans[N];
    int cnt;
    
    int main() {
        scanf("%lld",&n);
        if (n==1) return printf("None"),0;
        for (ll i=1,j;i*i<=n;i++)
            if (n%i==0) {
                j=n/i;
                for (ll k=1;k*j<=n;k++) {
                    if ((k*j-2ll)%i==0) ans[++cnt]=k*j-1ll;
                    if ((k*j+2ll)%i==0) ans[++cnt]=(k*j+1ll)%n;
                }
            }
        sort(ans+1,ans+cnt+1);ans[0]=1;cnt=unique(ans,ans+cnt+1)-ans-1;
        for (int i=0;i<=cnt;i++) printf("%lld
    ",ans[i]);
    }
    View Code
  • 相关阅读:
    java类加载机制
    java反射
    java注解
    设计模式 单例模式
    #1015 : KMP算法
    idea 快捷键
    基础数据类型综合
    工厂模式 VS 策略模式
    AtomicI 多线程中的原子操作
    ThreadLocal<T>
  • 原文地址:https://www.cnblogs.com/mastervan/p/13855127.html
Copyright © 2011-2022 走看看