jiejiejiang2004

题解:黑暗爆炸 1406[暴力]

黑暗爆炸 1406

Description

在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示。经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系。假设这个数是 \(n\),密码为 \(x\),那么可以得到如下表述: 密码 \(x\) 大于等于 \(0\),且小于 \(n\),而 \(x\) 的平方除以 \(n\),得到的余数为 \(1\)。 小可可知道满足上述条件的 \(x\) 可能不止一个,所以一定要把所有满足条件的 \(x\) 计算出来,密码肯定就在其中。计算的过程是很艰苦的,你能否编写一个程序来帮助小可可呢?(题中 \(x\)\(n\) 均为正整数)

Input

输入文件只有一行,且只有一个数字\(n(1 \le n \le 2,000,000,000)\)

Output

你的程序需要找到所有满足前面所描述条件的 \(x\),如果不存在这样的 \(x\),你的程序只需输出一行“None”(引号不输出),否则请按照从小到大的顺序输出这些 \(x\),每行一个数。

Sample Input

12

Sample Output

1
5
7
11

我的解法_1

这题的数据比较弱
从给出的数的开方一直到这个数本身去遍历判断
能过,但是似乎不是正解(还不够快)

有一个更快的办法(待更新)

我的代码_1

#include <iostream>
#include <cmath>

#define int long long

int t;

void solve()
{
    int n;
    std::cin >> n;
    if(n > 1) std::cout << 1 <<"\n";
    int st = sqrt(n);
    for(; st < n ; st ++)
    {
        if(st*st %n == 1)
        {
            std::cout << st <<"\n";
        }
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    t = 1;
    //std::cin >> t;
    while(t--)
    {
	  solve();
    }
    return 0;
}


有什么出现纰漏的地方还请大家在评论区指出!谢谢!

posted on 2024-07-14 13:46  Jiejiejiang  阅读(5)  评论(0编辑  收藏  举报

导航