输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
0 1<br/>0 0
OK
#include <iostream> #include <stdio.h> using namespace std; bool data[90]; bool isPrime(int n) { if(n<2) return false; if(n == 2) return true; if(n%2 == 0) return false; for(int i=3; i*i <= n; i+=2) { if(n%i == 0) return false; } return true; } int main() { // 生成data数组 for(int i=-39; i<50; i++) { data[i+39] = isPrime(i*i+i+41); } // 处理请求 int x, y; while(~scanf("%d %d", &x, &y)) { if(x || y) { while(x<=y) { if(data[x+39]) { x++; } else { break; } } if(x>y) { printf("OK\n"); } else { printf("Sorry\n"); } } else { break; } } return 0; }
/* * 详解:https://blog.csdn.net/qq_33375598/article/details/104605488 */ #include <cstdio> (802)#include <cmath> bool isPrime(int x){//判素数 if(x <= 1) return false; int sqr = (int)sqrt(1.0 * x); for (int i = 2; i <= sqr; ++i) { if(x % i == 0) return false; } return true; } int main(int argc, char const *argv[]){ int x, y; while(scanf("%d%d", &x, &y) != EOF){ if(x == 0 && y == 0) break; bool isFound = true;//假定全部都是素数 for (int i = x; i <= y; ++i) { int temp = i * i + i + 41; if(isPrime(temp) == false){ isFound = false; break; } } if(isFound == true){ printf("OK\n"); }else{//有非素数的 printf("Sorry\n"); } } return 0; }
//keep simple and stupid,程序是给人看,容易看懂是很重要的;#include <stdio.h>#include <math.h>intIsPrime(intn);int main(){int x, y, i;scanf("%d %d", &x, &y);while(x!=0||y!=0){intflag=1;for(i=x;i<=y;i++){if(IsPrime(i*i+i+41)!=1){printf("Sorry\n");flag=0;break;}}if(flag==1){printf("OK\n");}scanf("%d %d", &x, &y);}return0;}int IsPrime(int n){int i, res=1;if(n==1){res=0;}else{for(i=2;i<(int)sqrt(n)+1;i++){if(n%i==0){res=0;break;}}}return res;}
/*试探法。。。*/ #include <iostream> using namespace std; bool is_ok = true; bool is_su(int n) { bool right = true; int i = 2; for (; i < n; i++) { if (n % i == 0) { right = false; break; } } return right; } int main() { int x = 0, y = 0; while (cin >> x >> y) { is_ok = true; if (x == 0 && y == 0) break; int i = x, j = 0, k = 0; for (; i <= y; i++) { if (!is_su(i * i + i + 41)) { is_ok = false; break; } } if (is_ok) cout << "OK" << endl; else cout << "Sorry" << endl; } }
#include<iostream> #include<stdio.h> using namespace std; bool isPrime(int n){//判断素数 if(n==1) return false; for(int i=2;i<n/2;i++) if(n%i==0) return false; return true; } int main() { int x,y; while(~scanf("%d%d",&x,&y)){ if(x-y==0){//特殊情况,输出空白 cout<<endl; continue; } int flag=1; //标记变量置为1 for(int i=x;i<=y;i++){//从x到y遍历 int z=i*i+i+41; if(!isPrime(abs(z))){//此时已经出现非素数 flag=0; //标记变量置为0,可以直接退出循环 break; } } if(flag){ cout<<"OK\n"; }else{ cout<<"Sorry\n"; } } return 0; }
#include <stdio.h> int main() { int x,y; while(1) { scanf("%d %d",&x,&y); if(x==y&&x==0) break; int flag=0; for(int i=x;i<=y;i++) { int n=i*i+i+41; for(int j=2;j*j<=n;j++) { if(n%j==0) { printf("Sorry\n"); flag=1; break; } } if(flag) break; } if(flag) continue; printf("OK\n"); } return 0; }我真菜
#include <iostream> (720)#include <math.h> using namespace std; // 判断number是否为素数 bool isPrimer(int number) { //判断在[1,sqrt(number)]是否存在因子 for (int i = sqrt(number); i > 1; --i) { if (number % i == 0) { return false; } } return true; } int main(int argc, const char * argv[]) { int a = 0, b = 0; //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1 while (scanf("%d %d", &a, &b) != - 1) { //判断是否输入结束 if (a == 0 && b == 0) { break; } //是否都是素数 bool flag = true; //判断[a,b]进行i * i + i + 41后的结果是否都是素数 for (int i = a; i <= b; ++i) { if (!isPrimer(i * i + i + 41)) { flag = false; break; } } printf((flag ? "OK\n" : "Sorry\n")); } return 0; }
//终于换了一种题了哈,不是斐波那契数列了 #include <stdio.h> #include <stdlib.h> #include <math.h> int is_prime(int n) { if(n == 2) return 1; int m = sqrt(n); for(int i = 2; i <= m; i++) { if(n % i == 0) return 0; } return 1; } int main() { int x, y; int temp; while(1) { scanf("%d %d", &x, &y); if(x == 0 && y == 0) break; int target; temp = 1; for(int i = x; i <= y; i++) { target = i*i + i + 41; if(is_prime(target)) continue; else { temp = 0; break; } } if(temp) printf("OK\n"); else printf("Sorry\n"); } }
#include<iostream> using namespace std; bool isPrime(int x) { if (x % 2 == 0) { return false; } else { for (int i = 3; i * i <= x; i = i + 2) { if (x % i == 0) { return false; } } return true; } } int main() { int x; int y; while (cin >> x >> skipws >> y) { if (x == 0 && y == 0) { break; } else { int i = x; for (; i <= y; i=i++) { if (!isPrime(i*i+i+41)) { cout << "Sorry" << endl; break; } } if (i == y + 1) { cout << "OK" << endl; } } } return 0; }
def math(m): tem = m*m+m+41 t = int(pow(tem,0.5)) for j in range(2,t+1): if tem%j==0: return False return True def domath(a,b): for n in range(a,b+1): if math(n)==False: return False return True try: while True: x,y = map(int,input().split()) if x==0 and y==0: break if domath(x,y): print("OK") else: print("Sorry") except: pass
思路:素数的列表法,就是任何合数都可以表示成几个素数,然后标记一下,谁是素数的倍数,然后就可以了 #include <iostream> #include <vector> #include <stdio.h> using namespace std; vector<long long> v(100001); #define N 100000 void init() { int i, j; for (i = 2; i <= N; i++) { v[i] = 1; } for (i = 2; i <= N; i++) { //if (v[i]) printf(" %d ", i); for (j = i + i; j <= N; j += i) v[j] = 0; } } int main() { int x, y; init(); while (cin >> x >> y) { if (x == 0 && y == 0) { continue; } int temp; bool decide = false; for (int i = x; i <= y; i++) { temp = i * i + i + 41; if (v[temp] == 0) { decide = true; cout << "Sorry" << endl; break; } } if (!decide) cout << "OK" << endl; } }
//埃式筛选法 #include <bits/stdc++.h> #define PI 3.1415927 using namespace std; typedef long long ll; ll arr[1000005]; //1 2 3 5 bool isp[2600]; void init() { fill (isp,isp+2600,true); isp[0]=isp[1]=false; for(int i=0;i<=2591;i++) { if(isp[i]) { for(int j=i*2;j<=2591;j+=i) isp[j]=false; } } } int main(void) { init(); ios::sync_with_stdio(false); cin.tie(0); int x,y; while(cin>>x>>y) { if(x==0&&y==0) break; else { int ans=0; for(int i=x;i<=y;i++) { if(isp[i*i+i+41]) ans++; } if(ans==y-x+1) cout<<"OK"<<endl; else cout<<"Sorry"<<endl; } } return 0; }
#include<stdio.h>
#include<math.h>
int isPrime(int n)
{
int i;
int flag = 1;
if(n == 1)
{
flag = 0;
}
for(i = 2; i <= (int)sqrt(n); i++)
{
if(n % i == 0)
{
flag = 0;
}
}
return flag;
}
int main(void)
{
int a;
int b;
int i;
int flag = 1;
while(~scanf("%d%d", &a, &b))
{
if(a == 0 && b == 0)
{
break;
}
for(i = a; i <= b; i++)
{
if(isPrime(i * i + i + 41) == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
{
printf("OK\n");
}
else
{
printf("Sorry\n");
} flag = 1;
}
}