Java练习题目

如题所述

public class Test {
public static void main(String[] args) {
int[] inputs = { 1, 2, 3, 4, 5, 6 };
System.out.println("result = " + Arrays.toString(eulerNums(inputs)));
}

public static int[] eulerNums(int[] inputs) {
int[] outputs = new int[inputs.length];
for (int i = 0; i < inputs.length; i++) {
int count = 1;
for (int j = 2; j < inputs[i]; j++) {
int mod = inputs[i] % j;
//此处判断两个数是否互质
if ((mod > 1 && j % mod != 0) || mod == 1) {
count++;
}
}
outputs[i] = count;
}
return outputs;
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-19
static int phi(int n) {
// 使用n初始化结果
double result = n;

// 考虑n的所有质因子
// 对每个质因子p,将result乘以(1 - 1/p)
for (int p = 2; p * p <= n; ++p) {
// 检查p是否是n的因子
if (n % p == 0) {
// 使用p来更新n,确保后续p都是质因子
while (n % p == 0) {
n /= p;
}
result *= (1.0 - (1.0 / p));
}
}

//如果n有大于sqrt(n)质因子
//(最多只有一个这样的质因子)
if (n > 1) {
result *= (1.0 - (1.0 / n));
}
return (int) result;
}

第2个回答  2018-04-18
图片太小太模糊,看不清追问

这还小?

相似回答