题目大意
给定正整数 n,要构造长度为 n 的数组 a[1..n],每个元素取自 1..n,可重复使用。要求对于任意 i≠j 且 gcd(i,j)>1 的一对下标,必须满足 a[i]≠a[j]。问最少需要多少种不同的数字。
思路
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long n;
cin >> n;
// n=1 时只需 1 种;否则答案就是偶数个数 = n/2(向下取整)
cout << (n == 1 ? 1 : n / 2) << "\n";
return 0;
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
long n = Long.parseLong(in.readLine().trim());
// n=1 时只需 1 种;否则偶数个数为 n/2(整数除法)
System.out.println(n == 1 ? 1 : n / 2);
}
}
import sys
def main():
n = int(sys.stdin.readline())
# n=1 时只需 1 种;否则偶数个数为 n//2
print(1 if n == 1 else n // 2)
if __name__ == "__main__":
main()
小红想构造一个长度为 n 的数组 a1,a2,….,an,其中 a 满足 1≤ai≤n,[1,n] 的每个数字可以重复使用也可以不用。
她希望任意两个索引 i,j 满足 (i=j 且 gcd(i,j)=1 )时,其两个位置的权值不相等,即 ai=aj ,请你帮助小红判断最少需要多少种不同的数字。
一个整数 n(1≤n≤109) ,表示小红希望你构造的数组长度。
一个整数,表示数组中不同数字的个数的最小值。
输入
3
输出
1
说明
数组下标依次为 [1,2,3] ,对于任意的两个索引 i,j(i=j) 都满足 gcd(i,j)=1 ,所以我们可以只使用 2 来填数组 ,为 [2,2,2] ,当然 [1,1,1] 或者 [3,3,3] 也是正确的。
输入
4
输出
2