孪生数问题b

[问题描述]
孪生数定义:如果A的质因数之和等于B,B的质因数之和等于A,A和B称为孪生数(A和B不相等)。试找出正整数M和N之间的所有孪生数。
[输入形式]
从控制台输入两个正整数M和N (1=M<N<=20000),中间用一个空分隔。
[输出形式]
在标准输出上输出符合题目描述的M和N之间的全部孪生数对(包活M和N)。每行输出一对孪生数,用一个空格隔开,小的先输出,各行孪生数按照第一个数从小到大的顺序输出,一对孪生数只输出一次。如果没有符合要求的孪生数对,则输出字符串"NONE"。
[输入样例1]
3 23
[输出样例1]
3 9
4 8
4 16
5 6
5 12
5 18
6 12
6 18
7 10
7 20
8 16
10 20
12 18
13 22

C++代码如下(大佬勿喷):

#include<bits/stdc++.h>
using namespace std;
int check(int x)
{
    int i;
    for(i=2;i<x;i++)
    {
       if(x%i==0)
    return 0;
    }
    return 1;

}//判断yes or no素数
int main()
{
 int m,n,flag=0;
 cin>>m>>n;
 for(int i=m;i<=n;i++)
 { 
    int suma=0;
     for(int j=1;j<=i;j++)
     {
         if(i%j==0&&check(j))
         {
             suma+=j;
        }
     }
     int k; 
     for(k=i+1;k<=n;k++)
     {
         int sumb=0;
        for(int j=1;j<=k;j++)
     {
         if(k%j==0&&check(j))
         {
             sumb+=j;
        }
     }
     if(sumb==suma)    
     {
         flag=1; 
          cout<<i<<" "<<k<<endl;    
     }
     }
 }
 if(flag==0) cout<<"NONE";
   return 0;
}

Java参考代码:

import java.util.Scanner;
public class Main {
	public static boolean isPrime(int n) {
		if(n==1||n==0) return false;
		for(int i=2;i<=Math.sqrt(n);i++) {
			if(n%i==0) return false;
		}
		return true;
	}
	public static int sum(int num) {
		int s=0;
		for(int i=2;i<=num;i++) {
			if(num%i==0&&isPrime(i)) s+=i;
		}
		return s;
	}
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int flag=0;
        for(int i=m;i<=n;i++) {
        	for(int j=m;j<=n;j++) {
        		if(sum(i)==sum(j)&&i<j) {flag=1;System.out.println(i+" "+j);}
        	}
        }
        if(flag==0) System.out.println("NONE");
        scanner.close();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值