zoukankan      html  css  js  c++  java
  • 打印Smith数 求质因数&判断质数&数位相加

    问题:

    输出400以内的Smith数。Smith数是指满足下列条件的可分解的整数:
            其所有数位上的数字和=其全部素数因子的数字总和
    例如,9975是Smith数,9975=3*5*5*7*19,即9975的数字和=因子的数字总和=30


    注意相加都是数位相加,而且是要可以分解的数,意思是质数就不能了。

    Java实现:

    import java.util.*;
    
    class Smith {
    	static int[] a = new int[500];
    
    	public static void div_factors(int n) {
    		int i = 2;
    		int j = 0;
    		Arrays.fill(a,0);
    		while(i<=n){
    			if (n % i == 0) {
    				a[j] = i;
    				j++;
    				n /= i;
    				i = 2;
    			}
    			else
    				i++;
    
    		}
    	}
    	
    	public static int num_add(int n) {
    		int ans = 0;
    		do{
    		int tmp = n % 10;
    		ans += tmp;
    		n /= 10;
    		}while(n>0);
    		return ans;
    	
    	}
    	
    	   public static boolean isPrime(int n){
    			int i;
    			for( i = 2; i <= Math.sqrt(n); i++){
    				if(n % i == 0)
    					break;
    			}
    			if(i == (int)(Math.sqrt(n)+1))
    				return false;
    			else
    				return true;
    		}
    	
    	public static void main(String[] args) {	
    		for(int pos = 2; pos <= 400; pos++) {
    			int sum = 0;
    			div_factors(pos);
    			int q = 0;
    			while(true){
    				
    				if(a[q]!=0&&a[q]<10){
    					sum += a[q];
    					q++;
    				}
    				else if(a[q]>10){
    					do{
    					int tmp = a[q]%10;
    					sum += tmp;
    					a[q] /= 10;
    				}while(a[q]>0);
    					q++;
    			}
    			if(a[q] == 0)
    				break;
    		}
    
    			if(num_add(pos)==sum){
    				if(isPrime(pos))
    				System.out.println(pos);
    			}				
    	}
    }
    }


  • 相关阅读:
    java List转换为字符串并加入分隔符的一些方法总结
    jackson 实体转json 为NULL或者为空不参加序列化
    马云告别演讲
    Linux chmod命令
    Linux执行shell脚本的方法
    2019第36周日
    2019第36周六
    eclipse中的maven插件
    SpringBoot要点之使用Actuator监控
    eclipse隐藏的列编辑
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256658.html
Copyright © 2011-2022 走看看