3つの自然数があり、どの2つの積も残りの自然数で割ると余りが1になる。このような自然数の組をすべて求めよ。

三つの整数をa,b,cとおく。
a,b,cは自明にすべて相異なる。
そこで、a>b>cとしておくことにする。

パソコンでの総当たり計算

10000以下の自然数の組に対してチェックをしたところ、(5,3,2)しか条件を満たさなかった。

#include <iostream>
#include <fstream>
//uging namespace std;

int main()
{
  std::ofstream file;
  file.open("scan.dat");
  std::cout<<"start!:"<<std::endl;
  int a,b,c;
  a=3;
  b=2;
  c=1;
  while(true)
    {
      while(true)
	{
	  while(true)
	    {
	      //print
	      std::cout<<" a:"<<a<<" b:"<<b<<" c:"<<c;
	      if(((a*b)%c==1)&&((b*c)%a==1)&&(c*a)%b==1)
		{
		  file<<a<<" "<<b<<" "<<c<<std::endl;
		  std::cout<<std::endl;
		}
	      else
		{
		  std::cout<<"                                          ";
		  std::cout<<"\r";
		}
	      
	      c++;
	      if(c==b){c=1;break;}
	    }
	  
	  b++;
	  if(b==a){b=2;break;}
	}
      a++;
    }
  file.close();
  return 0;

}

分かっていること

  • a,b,cは互いに素。

これだけ。値を取りうる範囲が絞れないのが痛い。
なんとか空き時間作って本気で取り組みたい。