价值之和

价值之和

题目

D. 试题D:价值之和 10'

描述
【问题描述】

定义数字x的价值为其不同质因子的个数。

例如:数字20202020可以写成2020=2*2*5*1012020=2∗2∗5∗101,其价值为33.

JM boy请你帮忙计算整数11到20202020中,所有都不包含数字55的正整数的价值之和。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数(提示:答案最后一位数是奇数),在提交答案时只填写这个整数,填写多余的内容将无法得分。

思路

筛每一位值与筛素数,写起来感觉很麻烦,不知道有简单点的方法不,似乎可以用python 一行秒杀

代码

import java.util.*;

public class 价值之和 {
	public static void main(String[] args) {
		int [] prime=getPrime(10000);
		int value=0;
		for(int i=2;i<=2020;i++) {
			if(isOkay(i))
			value+=getValue(i, prime);
		}
		System.out.println(value);

	}
	public static boolean isOkay(int n) {
		int tmp=n;
		while(tmp!=0) {
			
			int last=tmp%10;
			if(last==5)return false;
			tmp/=10;
		}
		return true;
	}
	public static int getValue(int n, int[] prime) {
		int tmp = n;
		int count=0;
		boolean [] bool=new boolean[2025];
		while (tmp != 1) {
			for (int i = 0; i < prime.length; i++) {
				
				if (tmp % prime[i] == 0) {
					tmp /= prime[i];
					if(bool[prime[i]]==false) {
					count++;bool[prime[i]]=true;}
					break;
				}
			}
		}
		return count;
	}

	public static int[] getPrime(int n) {
		boolean[] list = new boolean[n + 1];
		int[] prime = new int[n + 1];
		int count = 0;
		for (int i = 2; i <= n; i++) {
			if (list[i] == false) {
				prime[count++] = i;
			}
			for (int j = 0; j < count && i * prime[j] <= n; j++) {
				list[i * prime[j]] = true;
				if (i % prime[j] == 0)
					break;
			}
		}
		int[] re = new int[count];
		for (int i = 0; i < count; i++)
			re[i] = prime[i];
		return re;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章