きったんの頭ん中☆
// Form1.cs
// https://mind.kittttttan.info/cs/primeform
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace PrimeForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// セル内を右寄せ
dataGridView1.Columns[0].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
dataGridView1.Columns[1].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
}
private void button1_Click(object sender, EventArgs e)
{
// 実行時間測定 開始
Stopwatch sw = new Stopwatch();
sw.Start();
// セルを消去
int rs = dataGridView1.Rows.Count - 1;
for (int i = 0; i < rs; i++)
{
dataGridView1.Rows.RemoveAt(0);
}
// 素数列を取得
int limit = getLimit();
int[] p = Prime.getPrimes(limit);
// データをセット
for (int i = 0; i < limit; i++)
{
dataGridView1.Rows.Add(i + 1, p[i]);
}
// 実行時間測定 終了
sw.Stop();
label1.Text = String.Format("{0}ms", sw.ElapsedMilliseconds);
}
/**
* テキストボックスから数値を取得
*/
private int getLimit()
{
int limit = 0;
try
{
limit = int.Parse(textBox1.Text);
}
catch (ArgumentNullException)
{
MessageBox.Show("ArgumentNullException", "Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
catch (OverflowException)
{
MessageBox.Show("OverflowException", "Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
catch (FormatException)
{
MessageBox.Show("FormatException", "Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
return limit;
}
}
}
// Prime.cs
using System;
public class Prime
{
/**
* n 番目までの素数列を返す
*/
public static int[] getPrimes(int n)
{
int i, j, sq, limit;
double times;
bool[] s;
int[] p;
if (n < 1) { return null; }
if (n < 50) { times = 5.0; } else { times = Math.Log(n) + 2.0; }
limit = (int)Math.Floor(n * times);
s = new bool[limit];
if (s == null) { return null; }
sq = (int)Math.Floor(Math.Sqrt(limit));
s[0] = s[1] = false;
for (i = 2; i < limit; i++)
{
s[i] = true;
}
for (i = 2; i < sq + 1; i++)
{
for (j = i * i; j < limit; j += i)
{
s[j] = false;
}
}
p = new int[n];
if (p == null) { return null; }
j = 0;
for (i = 0; j < n; i++)
{
if (s[i]) { p[j++] = i; }
}
return p;
}
}
// Form1.Designer.cs
namespace PrimeForm
{
partial class Form1
{
///
/// 必要なデザイナー変数です。
///
private System.ComponentModel.IContainer components = null;
///
/// 使用中のリソースをすべてクリーンアップします。
///
/// マネージ リソースが破棄される場合 true、破棄されない場合は false です。
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows フォーム デザイナーで生成されたコード
///
/// デザイナー サポートに必要なメソッドです。このメソッドの内容を
/// コード エディターで変更しないでください。
///
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.label1 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(12, 10);
this.textBox1.MaxLength = 32;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(90, 19);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "10";
this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// button1
//
this.button1.Location = new System.Drawing.Point(108, 8);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Calc";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// dataGridView1
//
this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.AllowUserToOrderColumns = true;
this.dataGridView1.AllowUserToResizeColumns = false;
this.dataGridView1.AllowUserToResizeRows = false;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2});
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.ReadOnly = true;
this.dataGridView1.RowTemplate.Height = 21;
this.dataGridView1.Size = new System.Drawing.Size(269, 216);
this.dataGridView1.TabIndex = 2;
//
// Column1
//
this.Column1.HeaderText = "No.";
this.Column1.MaxInputLength = 32;
this.Column1.Name = "Column1";
this.Column1.ReadOnly = true;
//
// Column2
//
this.Column2.HeaderText = "Prime";
this.Column2.MaxInputLength = 32;
this.Column2.Name = "Column2";
this.Column2.ReadOnly = true;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.IsSplitterFixed = true;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.label1);
this.splitContainer1.Panel1.Controls.Add(this.textBox1);
this.splitContainer1.Panel1.Controls.Add(this.button1);
this.splitContainer1.Panel1MinSize = 30;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.dataGridView1);
this.splitContainer1.Panel2MinSize = 30;
this.splitContainer1.Size = new System.Drawing.Size(269, 260);
this.splitContainer1.SplitterDistance = 40;
this.splitContainer1.TabIndex = 3;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(207, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(50, 12);
this.label1.TabIndex = 2;
this.label1.Text = "00000ms";
this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(269, 260);
this.Controls.Add(this.splitContainer1);
this.MaximizeBox = false;
this.Name = "Form1";
this.ShowIcon = false;
this.Text = "PrimeForm";
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
}
}