funkcja błędnie wypisuje

Dyskusje na temat języka C# oraz biblioteki .NET
kamciono5
Nowicjusz
Posty: 4
Dołączył(a): środa, 12 marca 2014, 21:25

funkcja błędnie wypisuje

Post przez kamciono5 »

witam
Chciałem się zapytać jak poprawić funkcję kongurencja żeby
Dla x=1 do p-1 podstawiała x do funkcji anxn+an-1 xn-1+…+a1x=a0 modulo p i sprawdzała czy jest prawdziwa.
Jeżeli x spełnia kongruencję pisz: x jest rozwiązaniem.

Code: Zaznacz cały

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Wprowadz liczbę składników: ");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("Podaj moduł p: ");
            int p = int.Parse(Console.ReadLine());
            Console.WriteLine("Wprowadz wyraz wolny: ");
            int a0 = (int.Parse(Console.ReadLine()) % p);
            int[] T_wsp = new int[n];  //a_i
            int[] T_pot = new int[n];   //n_i
            
            while (!Matematyka.czy_pierwsza(p))
            {
                Console.WriteLine("Wprowadzona liczba nie jest liczbą pierwszą.\nWprowadz ponownie liczbę: ");
                p = int.Parse(Console.ReadLine());
            }

            for (int i = 0 ; i < n;i++)
            {
                Console.WriteLine("Wprowadz " + (i+1) + " wspolczynnik");
                T_wsp[i] = (int.Parse(Console.ReadLine())%p);
                
            }
            
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("Wprowadz " + (i+1) + " potege");
                T_pot[i] = (int.Parse(Console.ReadLine()) % (p-1));
            }
            
            Matematyka.kongurencja(T_wsp, T_pot, p, a0,n);
                Console.ReadLine();
        }
    }
}
class Matematyka
{
    
    static int w;
    public static bool czy_pierwsza(int p)
    {
        if (p < 0)
        {
            Console.WriteLine("Wprowadz  liczbę dodatnią: ");
            return false;
        }
        if (p==1)
        {
            Console.WriteLine("Wprowadzona liczba jest liczbą pierwszą\nLiczbą tą jest: " + p);
            return true;
        }
            
        for (int i = 2; i * i <= p; i++)
            {
                if (p % i == 0)
                {
                   return false;
                }

            }
        Console.WriteLine("Wprowadzona liczba jest liczbą pierwszą\nLiczbą tą jest: " + p);
        return true;
        }

    public static void kongurencja(int[] a, int[] n, int p, int a0, int nn)
    {
        
        if (a0%p==0)
        {
            Console.WriteLine("0 jest rozwiazaniem");
        }
        
           for (int x = 1; x <= p-1; x++)
        {
            if (w!=a0)
            {
               w += (a[nn-x]) * (x ^ (n[nn-x]));
            }
            else
            {
                Console.WriteLine("\n"+x + " jest rozwiazaniem tej kongurencji");
                break;
            }
            Console.WriteLine("\nwynik kongurencji dla " + x + " =" + w);
            if (w == a0)
            {
                Console.WriteLine("\n" + x + " jest rozwiazaniem tej kongurencji");
                break;
            }
            
        } 
    }

}
Post Reply