Problème D : Spirale des nombres premiers
Fichier d’entrée : spiral.in
Fichier de sortie : spiral.out (IN+OUT)
Source : spiral.c | spiral.cpp | spiral.java | spiral.cs | spiral.php
Le spiral des nombres premiers a été modélisé premièrement en 1963 par le mathématicien Américo-polonais Stanislaw Ulman durant une réunion ennuyeuse J
La spirale dont on parlera aujourd’hui est une spirale de dimension N * N avec N un entier impaire entre 3 et 99 (compris). Cette spirale commence par 1 et parcoure les nombre jusqu’à N*N selon les schémas suivants (cas de N=3 et N=5)
Votre mission est de trouver pour N donné la somme maximale des nombres premiers dans un diagonal.
Pout N=3 on obtient 10 = 3 + 7 , pour N=5 on obtient 49=19+7+23.
Format d’entrée
Votre programme va être testé par plusieurs cas de tests, chaque cas de test est décrit par une seule ligne contenant un entier N impaire entre 3 et 99.
Format de sortie
Pour chaque cas de test, imprimer une seule ligne contenant la somme maximale trouvée.
Exemple de fichiers entrée/sortie :
| spiral.in | spiral.out |
| 5
3 |
49
10 |





























la ligne 40 de in/out(test case=81)
quelle est la réponse pour celle la svp
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
/**
*
* @author MOAMMOUS
*/
public class Spiral {
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
if (n == 2) {
return true;
}
for (int i = 2; i =i&&j>N-1-i)
{
indexes[0] = i – 1;
indexes[1] = j;
}
if(j=N-1-i)
{
indexes[0] = i;
indexes[1] = j + 1;
}
if(j<=i&&ji&&j<=N-1-i)
{
indexes[0] = i;
indexes[1] = j – 1;
}
return indexes;
}
public static int[][] spiralTable(int N){
int[][] spirTab = new int[N][N];
int n = (N-1)/2;
int l = 2;
spirTab[n][n] = 1;
for(int p = 1; p<=n; p++) {
int i = n+p-1;
int j = n+p;
while(l<=(2*p+1)*(2*p+1)) {
spirTab[i][j] = l;
int[] tmp = Spiral.next(i, j, N);
i = tmp[0];
j = tmp[1];
l++;
}
}
return spirTab;
}
public static int bigPrimeSum(int[][] spirTab){
int bigSum = 0;
int N = spirTab[0].length;
int p = 0;
while(p<=N-1){
int sum = 0;
for (int i = p; i bigSum)
bigSum = sum;
p++;
}
p = 1;
while(p<=N-1){
int sum = 0;
for (int i = p; i bigSum)
bigSum = sum;
p++;
}
p = N-1;
while(p>=0){
int sum = 0;
for (int i = p; i >= 0; i–) {
if(Spiral.isPrime(spirTab[p-i][i]))
sum+=spirTab[p-i][i];
}
if(sum>bigSum)
bigSum = sum;
p–;
}
p = N-2;
while(p>=0){
int sum = 0;
for (int i = p; i >= 0; i–) {
if(Spiral.isPrime(spirTab[i][p-i]))
sum+=spirTab[i][p-i];
}
if(sum>bigSum)
bigSum = sum;
p–;
}
return bigSum;
}
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(new File(« ./spiral.in »));
PrintWriter out = new PrintWriter(« ./spiral.out »);
while(in.hasNext())
{
out.print(Spiral.bigPrimeSum(Spiral.spiralTable(in.nextInt())));
if(in.hasNext())
out.println();
else
break;
}
in.close();
out.close();
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class spiral{
private static boolean test(int number){
int[] nombrepremier=new int[100];
int x=0, nombre=3 , p=0 , m=0;
boolean estpremier=true;
nombrepremier[p]=2;
while(nombre<=number){
for(m=0 ; m<=p ; m++){
if((nombre%nombrepremier[m])==0)
{
estpremier=false;
break;
}
}
if(estpremier){
p++;
nombrepremier[p]=nombre;
}
else if(!estpremier && nombre!=number)
estpremier=true;
nombre++;
}
return estpremier;
}
public static void main(String[] args) throws FileNotFoundException{
Scanner in=new Scanner(new File("spiral.in"));
PrintWriter out=new PrintWriter("spiral.out");
while(in.hasNextInt()){
int n=in.nextInt();
int b=0 , k=1 , i=0 , j=0;
int[][] matrice=new int[99][99];
//Déterminer la matrice spirale.
matrice[k-1][k-1]=1;
while(k=0 ; i–)
for(j=k-1 ; j>=0 ; j–)
matrice[i+1][j+1]=matrice[i][j];
k+=2;
i=k-2;
j=k-1;
b++;
matrice[i][j]=b;
while(i>0){
i–;
b++;
matrice[i][j]=b;
}
while(j>0){
j–;
b++;
matrice[i][j]=b;
}
while(i<k-1){
i++;
b++;
matrice[i][j]=b;
}
while(j=0 ; j–){
i=0;
k=j;
somme=0;
while(kmax) max=somme;
}
for(i=1 ; i<n ; i++){
k=i;
j=0;
somme=0;
while(kmax) max=somme;
}
for(j=0 ; j=0){
z=test(matrice[i][k]);
if(z && matrice[i][k]!=1)
somme+=matrice[i][k];
i++; k–;
}
if(somme>max) max=somme;
}
for(i=1 ; i<n ; i++){
k=i;
j=n-1;
somme=0;
while(kmax) max=somme;
}
out.println(max);
}
in.close();
out.close();
}
}