题解:黑暗爆炸 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) 编辑 收藏 举报