(New page: Category:MA453Spring2009Walther This is a program that will list all the cycles of U(x). An example would be:<br> Input: x = 20 (Finding the cycles of U(20))<br> Output: U(20) = {1,3...)
 
 
Line 1: Line 1:
 
[[Category:MA453Spring2009Walther]]
 
[[Category:MA453Spring2009Walther]]
 +
[[Category:MA375]]
 +
[[Category:math]]
 +
[[Category:discrete math]]
 +
[[Category:lecture notes]]
  
 +
=Program for U Groups=
 +
[[MA375]], Spring 2009, Prof. Walther
 +
----
 
This is a program that will list all the cycles of U(x).  An example would be:<br>
 
This is a program that will list all the cycles of U(x).  An example would be:<br>
 
Input: x = 20 (Finding the cycles of U(20))<br>
 
Input: x = 20 (Finding the cycles of U(20))<br>
Line 86: Line 93:
  
 
--[[User:Jniederh|Jniederh]] 17:31, 15 February 2009 (UTC)
 
--[[User:Jniederh|Jniederh]] 17:31, 15 February 2009 (UTC)
 +
 +
----
 +
[[MA375_%28WaltherSpring2009%29|Back to MA375, Spring 2009, Prof. Walther]]

Latest revision as of 07:38, 20 May 2013


Program for U Groups

MA375, Spring 2009, Prof. Walther


This is a program that will list all the cycles of U(x). An example would be:
Input: x = 20 (Finding the cycles of U(20))
Output: U(20) = {1,3,7,9,11,13,17,19}
<1> = {1}
<3> = {1,3,7,9}
<7> = {1,3,7,9}
<9> = {1,9}
<11> = {1,11}
<13> = {1,9,13,17}
<17> = {1,9,13,17}
<19> = {1,19}

Here's the program:

#include <iostream>
#include <cmath>
#include <map>
#include <list>

using namespace std;

int gcd(int a, int b);

int main(int argc, char **argv)
{
	map<int, list<int> > gens;
	map<int, list<int> >::iterator iter;
	list<int>::iterator l_iter;
	int u, p = -1;
	while(1)
	{
		cout << "Enter an integer x (for U(x)): ";
		cin >> u;
		if(u > 1)
			break;
		cout << "Error: x must be greater than 1\n";
	}
	for(int i = 1; i < u; i++)
	{
		if(gcd(i, u) == 1)
		{
			while(p != i)
			{
				gens[i].push_back(p = (p == -1 ? (i*i)%u : (i*p)%u));
			}
			p = -1;
		}		
	}
	iter = gens.begin();
	cout << "U(" << u << ") = {" << (*iter).first;
	iter++;
	for(; iter != gens.end(); iter++)
		cout << "," << (*iter).first;
	cout << "}" << endl;
	for(iter = gens.begin(); iter != gens.end(); iter++)
	{
		(*iter).second.sort();
		l_iter = (*iter).second.begin();
		cout << "<" << (*iter).first << "> = {" << *l_iter;
		l_iter++;
		for(; l_iter != (*iter).second.end(); l_iter++)
		{
			cout << "," << *l_iter;
		}
		cout << "}" << endl;
	}
	system("PAUSE");
}

int gcd(int a, int b)
{
	if(a > b)
		gcd(b, a);
	if(b%a == 0)
		return a;
	else
		return gcd(b%a, a);
}


I can also send you the program if you want to e-mail me at jniederh@purdue.edu

--Jniederh 17:31, 15 February 2009 (UTC)


Back to MA375, Spring 2009, Prof. Walther

Alumni Liaison

Ph.D. 2007, working on developing cool imaging technologies for digital cameras, camera phones, and video surveillance cameras.

Buyue Zhang