与えられた数 N より小さい素数を出力します。ボーナス ポイントを得るには、ソリューションがN*log(N)
時間内またはそれ以上に実行される必要があります。N は常に正の整数であると仮定できます。
入力サンプル:
プログラムは、最初の引数としてファイル名へのパスを受け入れる必要があります。このファイルの各行は 1 つのテスト ケースです。各テスト ケースには整数が含まれますn < 4,294,967,295
。
例えば
10
20
100
出力サンプル:
入力行ごとに、N 未満の素数をカンマ区切りで昇順に出力します。(カンマと数字の間にスペースを入れないでください) 例
2,3,5,7
2,3,5,7,11,13,17,19
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
これが私の解決策です:
public class problem1 {
public static void main(String [] args) throws Exception
{
File f=new File("C://Users/Rahul/Documents/Projects/r.txt");
FileReader fr=new FileReader(f);
List<Integer> l=new ArrayList<>();
int p;
BufferedReader br = new BufferedReader(fr);
String s;
while( (s= br.readLine()) != null ) {
int a=Integer.parseInt(s);
for(int i=2;i<a;i++)
{
p=0;
for(int j=2;j<i;j++)
{
if(i%j==0)
p=1;
}
if(p==0)
l.add(i);
}
String st=l.toString();
st=st.replaceAll("\\[", "").replaceAll("\\]", "").replace(", ", ",");
System.out.print(st);
System.out.println("\t");
}
fr.close();
}
}
私の入力は次のとおりです。
10
50
出力は次のとおりです。
2,3,5,7
2,3,5,7,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47
しかし、私がこの解決策を提出すると、彼らはこの解決策を受け入れません。
しかし、次のような文書にコンテンツを入れると:
10 50
30
Java プログラムがこの 50 を無視しようとしています。
これよりも良い解決策はありますか?アイデアをください!