注意:跨年没有满分,没有去测试,题目不清楚去哪里测试,所以不清楚是否AC,如有错误请指出
本题要求你在给定区间 [a,b] 内找出使得 n2+1 整除 n! 的所有正整数 n。
输入格式:
输入在一行中给出两个正整数 0<a<b≤104,其中 (b−a)≤20。
输出格式:
按照递增顺序,每行输出一个满足题面条件的 n。如果解不存在,则输出 None
。
输入样例 1:
30 50
输出样例 1:
38
43
47
输入样例 2:
50 55
输出样例 2:
None
思路:一开始的思路是找一个变量储存1到a的阶乘,但使用long long数据储存不到30,所以换了一种思路。
找n!能否整除于n^2+1,整除条件就是n^2+1能不能被整除到1,如果可以那就成立。
思考方向:38可以输出,41不可以输出
#include <bits/stdc++.h>
using namespace std;
int check(int a){
int t=a*a+1;
for(int i=2;i<=a;i++){
int c=1;
while(t%i==0&&i*c<=a){
t/=i;
c++;
}
}
return t;
}
int main()
{
int a, b;
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> a >> b;
int f=0;
for(int i=a;i<=b;i++){
int t=check1(i);
if(t==1){
cout << i << endl;
f=1;
}
}
if(f!=1){
cout << "None" << endl;
}
}