重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include "stdio.h"
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站建设、诏安网络推广、小程序设计、诏安网络营销、诏安企业策划、诏安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供诏安建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
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的所有整数进行判断。
扩展资料:
素数定理说明了素数在趋于无穷大时变得稀少的趋势。而孪生素数,与素数一样,也有相同的趋势,并且这种趋势比素数更为明显。
由于孪生素数猜想的高知名度以及它与哥德巴赫猜想的联系,因此不断有学术共同体外的数学爱好者试图证明它。有些人声称已经证明了孪生素数猜想。然而,尚未出现能够通过专业数学工作者审视的证明。
参考资料来源:百度百科-孪生素数
素数:为在大于1的自然数中,除了1和它本身以外不再有其他因数。
孪生素数:就是指相差2的素数对
代码:
public class JudgeTwinPrimeNumber {
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
System.out.println("请输入任意两个自然数");
long l1 = scaner.nextLong();
long l2 = scaner.nextLong();
if(l1 1l1%2 != 0){
if(l2 1l2%2 != 0){
if(l1 - l2 == 2|| l2 - l1 == 2){
System.out.println(l1 + "和" + l2 + "是一对孪生素数");
}
}
}else{
System.out.println(l1 + "和" + l2 + "不是一对孪生素数");
}
}
}
效果展示:
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;
}
}
代码如下:
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));
}
}
}
}
运行结果:
#include stdio.h
int prime(int n)
{int i;
for(i=2;in;i++)
if(n%i==0)
break;
if(i=ni1)
return 1;
else
return 0;
}
main()
{int i,a[200]={0},cnt=0;
for(i=2;i200;i++)
if(prime(i))
a[cnt++]=i;
printf("孪生素数有以下数值:\n");
for(i=0;icnt;i++)
if(a[i]==a[i+1]-2)
printf("%4d--%-4d\n",a[i], a[i+1]);
}
另外,程序,只有正确程序和错误程序之分,没有什么标准答案,更不存在权威答案,得出结果就对了,顶多是执行效率和易读性的区别。
我这里虽然比大多数学生党风格多用了一个函数,但是减少了读程序的难度,把素数的判定单独拿到一个函数中,只需要调用这个函数就能确认某个数值是不是素数。
使用数组,虽然这段代码占用的内存空间比某些课本上要多百十倍,但电脑上并不缺这点内存,除非是单片机上跑程序,而且这样写下来,程序段落感更强更清晰。
楼主的两个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编译测试结果: