[ad_1]
UVAの問題を解決しました: https://onlinejudge.org/external/131/13131.pdf[^]
私の解決策:
void solve(Scanner sc, int n, int k) { int sum=0; for(int i=1; i<=n; i++) { if(n%i==0 && i%k!=0)sum+=i; } System.out.println(sum); }
UVAでTLEになりました。 TLEになるのは明らかでした。
だから、私は自分の解決策を最適化し、このように実装しようとしました:
void solve(Scanner sc, int n, int k) { int sum=0; for(int i=1; i*i<=n; i++) { if(n%i==0 && i%k!=0)sum+=i; if(n%(n/i)==0 && (n/i)%k!=0)sum+=(n/i); } System.out.println(sum); }
しかし、それでも私はTLEを取得しています。 ここで何が起こっているのかを理解するために、C++ で 2 番目のアプローチを実装し、受け入れられました。 しかし、Java では TLE を取得しています。 なぜこれが起こっているのかわかりませんし、ACを取得する方法もわかりません. 問題を解決するのを手伝ってくれるようにお願いしています.. 私は落ち込んでいます。Java が大好きです。問題解決のために C++ に移行したくありません。
私が試したこと:
Java の完全なコード:
import java.util.Scanner; public class Main{ void solve(Scanner sc, int n, int k) { int sum=0; for(int i=1; i*i<=n; i++) { if(n%i==0 && i%k!=0)sum+=i; if(n%(n/i)==0 && (n/i)%k!=0)sum+=(n/i); } System.out.println(sum); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); Main main = new Main(); int t = sc.nextInt(); while(t-->0) { int n = sc.nextInt(); int k = sc.nextInt(); main.solve(sc, n, k); } } } <pre>
[ad_2]
コメント