プロジェクトオイラー問123

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20123
Problem 123 「素数の自乗で割った余り」 †


解法
nが偶数のときは2になることに注意するだけです。

#include <iostream>
#include <stdio.h>
using namespace std;


bool is_prime(long long int n){
	if(n<2)return false;
	if(n==2)return true;
	for(long long int i=2;i*i<=n;i+=1+(i&1)){
		if(n%i==0)return false;
	}
	return true;
}

const long long int L1=100000;
int main() {
long long int p=5;
 	long long int n=3;
while(1){
		if(((2*p*n)%(p*p))>L1*L1){
			 break;
		}
		n++;
		p+=2;
		while(is_prime(p)==false){
 			p+=2;
		}
		n++;
		p+=2;
		while(is_prime(p)==false){
			p+=2;
		}
 	}
	cout<<p<<"  "<<n<<"\n";
	return 0;
}
最終更新:2015年01月07日 08:49