價值之和

價值之和

題目

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

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