求条一道水题(样例未过)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int pr[100000005],t,n,ans=1;
bool vis[100000005];
int _log(int x,int y){
	int res=1;
	for(;res<=x;res=res*y%10000007);
	return res;
}
signed main(){
	cin>>n;
	for(int i=2;i<=n;i++){
		if(vis[i]==0){
			pr[++t]=i;
			ans*=_log(n,i),ans%=100000007;
			cout<<_log(n,i)<<" "<<ans<<'\n';
		}
		for(int j=1;j<=t&&i*pr[j]<=n;j++){
			vis[i*pr[j]]=1;
			if(i%pr[j]==0) break;
		}
	}
	cout<<ans;
	return 0;
}
1 个赞

虽然不知道怎么做,但是你为什么没开long long

#define int long long

帮忙调调呗

哦,但是我数论真不好,n的范围多少,还有样例给一下

1\le n\le 10^8

input

10

output

2520

luogu P4626,这道题 A 了就是我的第二十道蓝了

改到90了(TLE,最后一点差70ms)
image

代码给我看看

不要define,for里面用int减少时间

对着题解调的:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e8+7;
int pr[100000005],t,n,ans=1;
bitset<100000005>vis;
int _log(int x,int y){
	int res=1;
	for(;res<=x;res=res*y);
	res/=y;
	return res;
}
signed main(){
	cin>>n;
	for(int i=2;i<=n;i++){
		if(vis[i]==0){
			pr[++t]=i;
			ans*=_log(n,i),ans%=mod;
		}
		for(int j=1;j<=t&&i*pr[j]<=n;j++){
			vis[i*pr[j]]=1;
			if(i%pr[j]==0) break;
		}
	}
	cout<<ans;
	return 0;
}

不要用define
主函数for循环里用int这样更快

感谢送来的蓝题。


这算啥

逆天

《1.00s》

差1ms也是差(doge)

完了,复杂度似乎不对

看来p数组不能开long long


还差16道蓝题就100了

啊?496ms,差这么多?

改了,但……
image