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


パスカルの三角形の10億段目までに7で割り切れない数はいくつあるか答える問題。
とりあえず素朴に一行単位でまとめて計算。
計算時間3分。

#include<stdio.h>
#include<vector>
#include<iostream>
const int LIMIT=10000*10000*10;
int main(){
	__int64 n7=7;
	__int64 ans=0;
	std::vector<__int64> vec,vec7,vec7_2;
	vec.push_back(0);
	vec7.push_back(6);
	vec7_2.push_back(6);
	
	for(int i=1;i<=LIMIT;i++){
		int m=1;
		int dell=0;
		for(int j=vec.size()-1;j>=0;j--){
			dell+=(vec[j]*m*vec7[j]);
			m*=(vec[j]+1);
		}
		ans+=(i-dell);
		
		for(int j=0;j<vec7.size();j++){
			vec7[j]--;
		}
		for(int j=0;j<vec.size();j++){
			if(vec7[j]==-1){
				if(j==0)vec[j]++;
				vec7[j]=vec7_2[j];
				if(vec[j]==7){
					vec[j]=0;
					if(vec.size()<=j+1){
						n7*=7;
						vec.push_back(1);
						vec7_2.push_back(n7-1);
						vec7.push_back(n7-1);
						break;
					}else{
						vec[j+1]++;
					}
				}
			}
		}
	}
	std::cout<<"ans="<<ans<<"\n";
 }
最終更新:2015年12月15日 01:20