zoukankan      html  css  js  c++  java
  • bzoj 1406 数论

    思路:

    x ^ 2 = k*n + 1

    x ^ 1 - 1 = k * n

    (x + 1) * (x - 1) = k * n

    我们设

    x + 1 = n1 * k1

    x - 1 = n2 * k2

    n1 * n2 * k1 * k2 == k * n

    我们只需要枚举n >= sqrt(n) 的 n 的约数 和 他们的倍数然后check就好啦。

    #include<bits/stdc++.h>
    #define LL long long
    #define fi first
    #define se second
    #define mk make_pair
    #define pii pair<int, int>
    
    using namespace std;
    
    const int N = 4e5 + 7;
    const int M = 1e5 + 7;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const int mod = 1e9 +7;
    
    int n;
    set<int> ans;
    int main() {
    
        scanf("%d", &n);
        for(int i = 1; i * i <= n; i++) {
            if(n % i == 0) {
                int now = n / i;
                for(int j = now; j <= n; j += now) {
                    if((j + 2) % (n / now) == 0) ans.insert(j + 1);
                    if((j - 2) % (n / now) == 0) ans.insert(j - 1);
                }
            }
        }
    
        set<int> :: iterator it;
        if(!ans.size()) {
            puts("None");
        } else {
            puts("1");
            for(it = ans.begin(); it != ans.end(); it++) {
                if(*it >= 0 && *it < n) printf("%d
    ", *it);
            }
        }
        return 0;
    }
    
    
    /*
    
    */
  • 相关阅读:
    ACM HDU 1176 免费馅饼(DP)
    PHP下载时中文文件名乱码的问题
    NYOJ 27
    NYOJ 148
    NYOJ 8
    NYOJ 138
    NYOJ 461
    POJ 1200
    STL排序算法
    NYOJ 523
  • 原文地址:https://www.cnblogs.com/CJLHY/p/9301905.html
Copyright © 2011-2022 走看看