#include "stdio.h"
我们提供的服务有:成都网站建设、网站设计、微信公众号开发、网站优化、网站认证、济源ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的济源网站制作公司
int prime(int n){//素数
int i;
for(i=3;i*i=n;i+=2)
duif(!(n%i))
return 0;
return 1;
}
int main(int argc,char *argv[]){
int n,k;
for(k=0,n=3;k1000;n+=2)
if(prime(n) prime(n+2))
printf(++k%7 ? "%6d/%-6d " : "%6d/%-6d\n",n,n+2);
if(k%7)
printf("\n");
return 0;
}
当i==3时,(temp=(int)(sqrt(i)))==1
因为temp==1了,所以for(int j=2;j=temp;++j)的循环就直接“跳过”了,也就不会执行循环体内的程序解决办法是将for(int j=2;……)改为for(int j=1;……)将循环体内的if(i%j==0)改为if(j!=1 i%j==0)更简单的办法是不利用平方根求素数的捷径,而是直接对小于i的所有整数进行判断。
扩展资料:
素数定理说明了素数在趋于无穷大时变得稀少的趋势。而孪生素数,与素数一样,也有相同的趋势,并且这种趋势比素数更为明显。
由于孪生素数猜想的高知名度以及它与哥德巴赫猜想的联系,因此不断有学术共同体外的数学爱好者试图证明它。有些人声称已经证明了孪生素数猜想。然而,尚未出现能够通过专业数学工作者审视的证明。
参考资料来源:百度百科-孪生素数
int j = 0;//用于计算孪生素数的个数for(int i=m-2;i0;i--){ if(isPrime(i) isPrime(i+2)) { System.out.println(i); j++; if(j == 2) break; }}
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int b = m, a, i;
for (i=m;i5;i--) {
if (isSuShu(i)) {
b = i;
break;
}
}
for (int j=i;j5;j--) {
if (isSuShu(j)) {
a = j;
if (b - a == 2) {
System.out.println(a + "," + b);
return;
} else {
b = j;
}
}
}
}
private static boolean isSuShu(int a) {
for (int i=2;i=Math.sqrt(a);i++) {
if (a%i==0) {
return false;
}
}
return true;
}
}
思路:
1.定义一个“函数prime”,判断该数是否是素数;
2.主程序:
1)输出(2,3)
2)从3~999的所有奇数循环;
3)如果这个数是素数,则判断这个数+2是不是素数,如果是,则输出(这个数,这个数+2)。
程序LZ可以自己试试看。
这个定义的函数prime的思路是:
1.要判断一个数 n 是否是素数,可以从2~trunc(sqrt(n))循环,再看循环变量是否能整除 n ,如果都不能整除,则 n 是素数;
2.过程如下:
function prime(n:longint):boolean;
var i:longint;
begin
prime:=true;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then
begin
prime:=false;
exit;
end;
end;
这段代码不优化,不过由于是1000以内,还可以。
经过上机调试,测试通过,源代码见附件。
希望对你有帮助。
楼主的两个for循环用的不对,另外整个流程也是有问题的。改正的代码如下:
#include stdio.h
#include math.h
int main()
{
int a,b; /* 输入的两个数据范围 */
int i,j,k;
int num=0, s; /* 素数个数, 素数标志 */
scanf( "%d %d", a,b );
for( i=a;i+2=b;i++ )
{
s = 1; /* 先假设i是素数 */
k = sqrt(i);
for( j=2;j=k;j++ )
{
if( i%j == 0 )
{
s = 0; /* i不是素数 */
break;
}
}
if( s )
{
k = sqrt( i+2 );
for( j=2;j=k;j++ )
{
if( (i+2)%j == 0 )
{
s = 0; /* i+2不是素数 */
break;
}
}
if( s )
{
++num; /* i+2是素数 */
printf( "第%d个孪生素数[%d,%d]\n", num, i, i+2 );
}
}
}
return 0;
}
二、用GCC编译测试结果:
代码如下:
public class App {
/***
* 判断 n 是否素数
* @param n
* @return
*/
static boolean isPrime(int n) {
for (int i = 2; i n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (int i = 2; i 100; i++) {
if (isPrime(i) isPrime(i + 2)) {
System.out.println(i + "," + (i + 2));
}
}
}
}
运行结果: