Учитывая число N
, предлагается найти количество различных фракций, таких, что если приведенная доля равна P/Q (P и Q взаимно простые), то P и Q должен быть <=N
. Итак, сначала я придумал этот наивный подход.Число отдельных фракций меньше 1
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
Scanner sc = new Scanner (System.in);
int t = sc.nextInt();//number of test cases
while(t-->0){
int n = sc.nextInt();//integer N
int count=0;
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(gcd(i,j)==1)
count++;
}
}
System.out.println(count);
}
}
public static int gcd(int a,int b){
if(b!=0)
return gcd(b,a%b);
else
return a;
}
который был отклонен как TLE. Затем я подумал о предварительном вычислении значений, как было упомянуто N<=1000000
. Так что я попытался это:
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
Scanner sc = new Scanner (System.in);
int[] arr = new int[1000001];
arr[0]=0;
for(int i=1;i<1000001;i++)
{
arr[i]=arr[i-1];
for(int j=i-1;j>=0;j--)
{
if(gcd(i,j)==1)
arr[i]++;
}
}
int t = sc.nextInt();
while(t-->0){
int n = sc.nextInt();
System.out.println(arr[n]);
}
}
public static int gcd(int a,int b){
if(b!=0)
return gcd(b,a%b);
else
return a;
}
Но теперь она показывает TLE даже для N=1
, 2
и 3
тоже. Я не могу понять, что происходит не так, даже если петли кажутся правильными. Любой лучший подход также приветствуется.
ПРИМЕЧАНИЕ: TLE ВРЕМЯ ОГРАНИЧИВАЕТСЯ ПРЕИМУЩЕСТВА
Что TLE значит? Слишком мало усилий? – subrunner
Возможно, вам захочется найти последовательность Farey, например. https://en.wikipedia.org/wiki/Farey_sequence – dmuir
@subrunner TLE превышен лимит времени – yobro97