数値が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;
}
しかし、今では、あまりにも、N=1
、2
と3
のためのTLEを示しています。ループが正しいように見えても何がうまくいかないのか理解できません。より良いアプローチも歓迎します。
注:TLEは制限時間を超えています
TLEは何を意味するのでしょうか?あまりにも小さな努力? – subrunner
Fareyシーケンスを検索したい場合があります。 https://en.wikipedia.org/wiki/Farey_sequence – dmuir
@subrunner TLEは制限時間を超過 – yobro97