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;
}
}
}
}