c# asal sayı

T-GeNeRaLs

Kadim Üye
21 Ağu 2007
5,183
51
İstanbul
C# Asal Sayı pProgramı
Kullanılan C# kavramları : Asynchronous Threading, Windows Forms, Components, Exception Handling, etc
// Prime Numbers. © 2005 Halil Özgür - halil.ozgur [at] gmail.com
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace isPrime
{
/// <summary>
/// isPrimeForm : Main and the only Form.
/// </summary>
public class isPrimeForm : System.Windows.Forms.Form
{
#region Declarations, Ctor & Dispose()
private System.Threading.Thread PrimeTesterThread;
private delegate **** testCompleteHandler(bool isPrime,ulong catched);
private event testCompleteHandler testComplete;
private System.Threading.Thread RangeTesterThread;
private delegate **** rangeTestCompleteHandler();
private event rangeTestCompleteHandler rangeTestComplete;
private decimal number = 0m , rangeStart = 0m , rangeEnd = 0m , ct = 0m;
private string firstLine = "";
private System.Windows.Forms.GroupBox groupBoxInput;
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.TextBox textBoxInput;
private System.Windows.Forms.Button buttonClear;
private System.Windows.Forms.TabControl tabControl;
private System.Windows.Forms.TabPage tabPageSingle;
private System.Windows.Forms.TabPage tabPageRange;
private System.Windows.Forms.TextBox textBoxRangeStart;
private System.Windows.Forms.TextBox textBoxRangeEnd;
private System.Windows.Forms.Label labelRangeTo;
private System.Windows.Forms.Label labelRangeFrom;
private System.Windows.Forms.LinkLabel linkLabel;
private System.Windows.Forms.Label labelInfoSingle;
private System.Windows.Forms.Button buttonTest;
private System.Windows.Forms.Button buttonStart;
private System.Windows.Forms.TextBox textBoxRangeResults;
private System.Windows.Forms.TextBox textBoxStatusSingle;
private System.Windows.Forms.Button buttonCancelRange;
private System.Windows.Forms.ProgressBar progressBarRange;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.SaveFileDialog saveFileDialog;
private System.Windows.Forms.Label labelNumberCount;
private System.Windows.Forms.CheckBox checkBoxNC;
private System.Windows.Forms.Button buttonCancel;
public isPrimeForm()
{
InitializeComponent();
this.testComplete += new testCompleteHandler(this.testHandler);
this.rangeTestComplete += new rangeTestCompleteHandler(this.rangeTestHandler);
}
protected override **** Dispose( bool disposing )
{
if ( this.PrimeTesterThread != null )
this.PrimeTesterThread.Abort();
if ( this.RangeTesterThread != null )
this.RangeTesterThread.Abort();
base.Dispose( disposing );
}
#endregion
#region Windows Form Designer generated code
private **** InitializeComponent()
{
// ...
// InitializeComponent() kısmı.
// ...
}
[STAThread]
static **** Main()
{
Application.Run(new isPrimeForm());
}
#endregion
private **** isPrimeForm_Load(object sender, System.EventArgs e)
{
this.Size = new Size( 327 , 295 );
}
private **** buttonTest_Click(object sender, System.EventArgs e)
{
string msg;
if ( validateInput( this.textBoxInput.Text , out this.number , out msg ) )
{
this.buttonClear.Enabled = this.buttonTest.Enabled = this.textBoxInput.Enabled = false;
this.buttonCancel.Enabled = true;
this.CancelButton = this.buttonCancel;
this.labelInfoSingle.Text = "[ ESC = cancel ]";
this.tabPageSingle.Cursor = Cursors.WaitCursor;
this.firstLine = this.number.ToString( "N0" ) + "\r\n\r\n";
this.textBoxStatusSingle.Text = firstLine + "Testing...";
this.progressBar.Value = 0;
this.progressBar.Show();
this.progressBar.Select();
this.PrimeTesterThread = new Thread(new ThreadStart(this.primeTestThreadStart));
this.PrimeTesterThread.Start();
}
else
{
this.textBoxStatusSingle.Text = msg;
this.textBoxInput.Focus();
}
}
private **** buttonStart_Click(object sender, System.EventArgs e)
{
string msg;
if ( this.validateInput( this.textBoxRangeStart.Text , out this.rangeStart , out msg )
&& this.validateInput( this.textBoxRangeEnd.Text , out this.rangeEnd , out msg ) )
{
this.textBoxRangeStart.Enabled = this.textBoxRangeEnd.Enabled = this.buttonSave.Enabled
= this.buttonStart.Enabled = this.textBoxRangeResults.Enabled = false;
this.buttonCancelRange.Enabled = true;
this.tabPageRange.Cursor = Cursors.WaitCursor;
this.textBoxRangeResults.Clear();
this.labelNumberCount.Show();
this.progressBarRange.Value = 0;
this.progressBarRange.Show();
this.progressBarRange.Select();
this.RangeTesterThread = new Thread(new ThreadStart(this.rangeTestThreadStart));
this.RangeTesterThread.Start();
}
else
this.textBoxRangeResults.Text = msg;
}
private **** buttonCancel_Click(object sender, System.EventArgs e)
{
this.PrimeTesterThread.Abort();
this.textBoxStatusSingle.Text = this.firstLine + "Canceled.";
this.testEnd();
}
private **** buttonCancelRange_Click(object sender, System.EventArgs e)
{
this.RangeTesterThread.Abort();
this.textBoxRangeResults.AppendText( "Canceled.\r\n" );
this.rangeTestEnd();
}
private **** buttonClear_Click(object sender, System.EventArgs e)
{
this.textBoxInput.Text = "";
this.textBoxInput.Focus();
}
private **** testHandler(bool isPrime,ulong catched)
{
this.BeginInvoke(new testCompleteHandler(this.test_Complete) ,
new Object[] { isPrime , catched } );
}
private **** rangeTestHandler()
{
this.BeginInvoke(new rangeTestCompleteHandler(this.rangeTest_Complete)) ;
}
private **** test_Complete(bool isPrime,ulong catched)
{
this.PrimeTesterThread.Abort();
if ( isPrime )
this.textBoxStatusSingle.Text = firstLine + "PRIME.";
else if ( catched > 0 )
this.textBoxStatusSingle.Text = firstLine + "NOT Prime, divisible to " + catched.ToString("N0");
else
this.textBoxStatusSingle.Text = firstLine + "NOT Prime.";
this.testEnd();
}
private **** rangeTest_Complete()
{
this.RangeTesterThread.Abort();
this.rangeTestEnd();
}
private **** testEnd()
{
this.PrimeTesterThread = null;
GC.Collect();
this.buttonClear.Enabled = this.buttonTest.Enabled = this.textBoxInput.Enabled = true;
this.buttonCancel.Enabled = false;
this.CancelButton = this.buttonClear;
this.tabPageSingle.Cursor = Cursors.Default;
this.labelInfoSingle.Text = "[ ENTER = test , ESC = clear ]";
this.progressBar.Hide();
this.textBoxInput.Focus();
}
private **** rangeTestEnd()
{
this.textBoxRangeResults.AppendText( "Number Count : " + this.ct.ToString( "N0" ) + "\r\n" );
this.RangeTesterThread = null;
GC.Collect();
this.buttonStart.Enabled = this.textBoxRangeStart.Enabled = this.buttonSave.Enabled
= this.textBoxRangeEnd.Enabled = this.textBoxRangeResults.Enabled = true;
this.buttonCancelRange.Enabled = false;
this.labelNumberCount.Hide();
this.tabPageRange.Cursor = Cursors.Default;
this.progressBarRange.Hide();
this.textBoxRangeStart.Focus();
}
private **** primeTestThreadStart()
{
ulong result = this.primeTest( this.number );
switch ( result )
{
case 1:
this.testComplete( true , 1 );
break;
default:
this.testComplete( false , result );
break;
}
}
private **** rangeTestThreadStart()
{
ulong result;
decimal start = 0m , end = this.ct = 0m;
if ( this.rangeStart < 2 )
start = 1;
else
start = this.rangeStart;
if ( this.rangeEnd < 2 )
end = 1;
else
end = this.rangeEnd;
if ( start > end )
{
decimal temp = start;
start = end;
end = temp;
}
this.textBoxRangeResults.AppendText( "Prime numbers between " + this.rangeStart.ToString("N0") + " and " + this.rangeEnd.ToString("N0") + " :\r\n" );
decimal numbers = (decimal)Math.Ceiling( ((double)((this.rangeEnd - this.rangeStart)/50)) );
decimal step_r = ( (numbers)%2 == 0 ? numbers + 1 : numbers );
start--;
while ( end > start++ )
{
result = this.primeTest(start);
if ( result == 1 )
{
this.textBoxRangeResults.AppendText( start.ToString( "N0" ) + "\r\n" );
this.ct++;
if ( this.checkBoxNC.Checked )
this.labelNumberCount.Text = "Number Count :\r\n" + ct.ToString("N0");
}
if ( start % step_r == 0 )
this.progressBarRange.PerformStep();
}
this.rangeTestComplete();
}
private ulong primeTest( decimal n )
{
if ( n < 2 )
return 0;
if ( n == 2 || n == 3 )
return 1;
if ( n % 2 == 0 )
return 2;
else
{
ulong end = (ulong)Math.Ceiling( Math.Sqrt( (double)n ) ) + 1;
ulong step = ( (end/60) % 2 == 0 ? end/60 + 1 : end/60 );
for ( ulong i = 3 ; i <= end ; i += 2 )
{
if ( n % i == 0 )
return i;
if ( i % step == 0 )
this.progressBar.PerformStep();
}
return 1;
}
}
private bool validateInput( string s , out decimal n , out string errMsg )
{
n = 0m;
errMsg = null;
if ( s.Length == 0 )
{
errMsg = "\r\nENTER A NUMBER TO TEST";
return false;
}
try
{
n = Convert.ToDecimal(s);
}
catch ( System.FormatException )
{
errMsg = "ENTER A POSITIVE INTEGER,\r\nNOT A STRING ";
return false;
}
catch ( System.OverflowException )
{
errMsg = "ENTER AN INTEGER\r\nBETWEEN 2^96 and - (2^96)";
return false;
}
return true;
}
private **** linkLabel_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("mailto:halil.ozg [email protected]?subject=about isPrime");
}
private **** tabControl_SelectedIndexChanged(object sender, System.EventArgs e)
{
if ( this.tabControl.SelectedIndex == 0 )
{
this.Size = new Size( 327 , 295 );
this.textBoxInput.Focus();
}
else
{
this.Size = new Size( 336 , 368 );
this.textBoxRangeStart.Focus();
}
}
private **** buttonSave_Click(object sender, System.EventArgs e)
{
this.saveFileDialog.ShowDialog();
}
private **** saveFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
StreamWriter sw = new StreamWriter( this.saveFileDialog.FileName );
sw.Write( this.textBoxRangeResults.Text );
sw.Close();
}
private **** textBoxes_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private **** textBoxes_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
((TextBox)sender).Text = e.Data.GetData(DataFormats.Text).ToString();
}
}
}
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.