user-0 提问: hdu2012

回复:
user: user-1
content: 计算错误，41<=  n^2+n+41<= 2591 考虑对称性，(-x)^2 -x +41 = (x+1)^2+(x+1)+41 这个其实只要检测一半区域就够了

user: user-0
content: 引用 10 楼 lm_whales 的回复:-39<= n<=50,41 =<  n^2+n+41 <= 3041 这个范围的素数很少，筛法的话，非常快 应该不需要查表才对，当然就是直接判断，也没问题才对，不会很慢的  f(n+1) -f(n) = 2(n+1) 这是个二阶等差数列，循环的话，也很快 但是除了打表其他方法都不能ac

user: user-0
content: 引用 4 楼 user-2 的回复:c 的初始值是否应该是false，否则c一直为true 我那个Java的太阳系模型的问题能帮我看看嘛，谢谢了

user: user-0
content: 引用 4 楼 user-2 的回复:c 的初始值是否应该是false，否则c一直为true 还是一样

user: user-1
content: -39<= n<=50,41 =<  n^2+n+41 <= 3041 这个范围的素数很少，筛法的话，非常快 应该不需要查表才对，当然就是直接判断，也没问题才对，不会很慢的  f(n+1) -f(n) = 2(n+1) 这是个二阶等差数列，循环的话，也很快

user: user-0
content: 引用 7 楼 user-2 的回复:你试下这种，我没调试     #include<stdio.h> #include<math.h> int main() { 	int a, b, i, t, j, x; 	bool c = true; 	while (scanf("%d%d", &a, &b) != EOF) 	{ 		if (a == 0 && b == 0) 			break; 		if (a > b) 		{ 			t = a; 			a = b; 			b = t; 		}  		for (i = a; i <= b; i++) 		{ 			x = i * i + i + 41; 			for (j = 2; j <= int(sqrt(x)); j++) 			{ 				if (x % j == 0) 				{ 					c = false; 					printf("Sorry\n"); 					break; 				} 			} 		} 		if (c == true) 			printf("OK\n"); 	} 	return 0; } #include<stdio.h>   #include<string.h>       int main(void)   {       int m, n;       int x[] =        {           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1       };           while (scanf("%d%d", &m, &n), m || n)       {           for (m += 39, n += 39; x[m] && m <= n ; m++);               puts(m > n ? "OK" : "Sorry");       }               return 0;   }    网上的只有这种打表的能a，我也不知道为什么

user: user-0
content: 引用 7 楼 user-2 的回复:你试下这种，我没调试     #include<stdio.h> #include<math.h> int main() { 	int a, b, i, t, j, x; 	bool c = true; 	while (scanf("%d%d", &a, &b) != EOF) 	{ 		if (a == 0 && b == 0) 			break; 		if (a > b) 		{ 			t = a; 			a = b; 			b = t; 		}  		for (i = a; i <= b; i++) 		{ 			x = i * i + i + 41; 			for (j = 2; j <= int(sqrt(x)); j++) 			{ 				if (x % j == 0) 				{ 					c = false; 					printf("Sorry\n"); 					break; 				} 			} 		} 		if (c == true) 			printf("OK\n"); 	} 	return 0; }

user: user-2
content: 你试下这种，我没调试     #include<stdio.h> #include<math.h> int main() { 	int a, b, i, t, j, x; 	bool c = true; 	while (scanf("%d%d", &a, &b) != EOF) 	{ 		if (a == 0 && b == 0) 			break; 		if (a > b) 		{ 			t = a; 			a = b; 			b = t; 		}  		for (i = a; i <= b; i++) 		{ 			x = i * i + i + 41; 			for (j = 2; j <= int(sqrt(x)); j++) 			{ 				if (x % j == 0) 				{ 					c = false; 					printf("Sorry\n"); 					break; 				} 			} 		} 		if (c == true) 			printf("OK\n"); 	} 	return 0; }

user: user-2
content: c 的初始值是否应该是false，否则c一直为true

user: user-0
content: 引用 1 楼 user-2 的回复:for(j = 2;j <= int(sqrt(i));j++) 应该是 for(j = 2;j <= int(sqrt(x));j++) 吧 #include<stdio.h> #include<math.h> int main() { 	int a,b,i,t,j,x; 	bool c = true; 	while(scanf("%d%d",&a,&b) != EOF) 	{ 		if(a == 0 && b == 0) 			break; 		if(a > b) 		{ 			t = a; 			a = b; 			b = t; 		} 		 		for(i = a;i <= b;i++) 		{ 			x = i * i + i + 41; 			for(j = 2;j <= int（sqrt(x)）;j++) 			{ 				if(x % j != 0) 					c = true; 				else 				{ 					printf("Sorry\n"); 					break; 				} 			} 		} 		if(c == true) 		printf("OK\n"); 	} 	return 0; }

user: user-0
content: 引用 1 楼 user-2 的回复:for(j = 2;j <= int(sqrt(i));j++) 应该是 for(j = 2;j <= int(sqrt(x));j++) 吧a不了

user: user-2
content: for(j = 2;j <= int(sqrt(i));j++) 应该是 for(j = 2;j <= int(sqrt(x));j++) 吧