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);
    			}				
    	}
    }
    }


  • 相关阅读:
    webform单选、复选
    webform下拉列表、列表框
    webform文本框 、显示文字、按钮、跳转页面、页面传值
    sol函数初级查询,去重、分组、排序
    sql基础
    递归
    函数有多个返回值
    Hibernate (开放源代码的对象关系映射框架)介绍
    extjs介绍
    easyui介绍
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256658.html
Copyright © 2011-2022 走看看