前回の記事の問題をJavaで解いてみた.問題については前回の記事を参照してください.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test=sc.nextInt(); System.out.println(getprimenum(test)); } private static int getprimenum(int prime){ int count=0; int now=2; if(prime==1){return 0;} else{ while(now<prime){ if(primecheck(now)){count++;} now++; } } return count; } private static boolean primecheck(int testprime){ if(testprime==2){return true;} else{ for(int n=2;n<testprime;n++){ if(testprime%n==0)return false; } return true; } } }
考え方に関しても前回の記事を参照.結果としては20MBのメモリ使用率で995msecでクリア.
ちなみにCではメモリ使用率748KB,実行時間は46msec.
同じことに対してのコードであってもこういう風に違うという観点の話を大学でしないことが残念でならない.
プログラミング言語で何をやるかという観点も非常に大事だ.その一方で,プログラミング言語はどのような特性を持ち得ているのか
ということを考えるべきだ.
何をやるかとのたまうことは正直な話,誰にでもできる.
大学が目指すべきはそのアイデアを具体的な形にすることのできる技術についても考えることのできる人材なのだが……
その道は遠そうだと自らの大学のカリキュラムを見て思うのであった.
素数とは、1 と自分自身以外に正の約数を持たない、1 以外の自然数のことをいいます。
自然数 n が与えられるので、 n よりも小さい素数の数は何個存在するかを求めてください。
入力は以下の形式で標準入力から与えられる。
n
11
4
100
25
10000
1229
#include<stdio.h> int prime(int tester); int main(void){ int input; int count=0; int now=2; scanf("%d\n",&input); for(;now<input;now++){ if(prime(now)){count++;} } printf("%d\n",count); return 0; } int prime(int tester){ int count=2; if(tester==2){return 1;} else{ for(;count<tester;count++){ if(tester%count==0){return 0;} } return 1; } }
int prime(int tester);
で宣言をしておく.
そしてメイン関数で2から入力された数までの素数をカウントしている.
int prime(int tester)の中身は純粋な素数判定プログラム.
素数はその数(tester)と1以外では割り切れない数であるので,
2からtester未満の数でtesterを割った時に割り切れないということと同じである.
1が返り値であればtesterは素数.0が返り値であればtesterは素数でないということになっている.
javaとかは余裕があったらまた書いてみる.