<div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post">
<p><br>
</p>
<p><br>
</p>
<p></p><div class="dp-highlighter bg_cpp"><div class="bar"><div class="tools"><b>[cpp]</b> <a href="#" class="ViewSource" title="view plain" οnclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" target="_blank">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" οnclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" target="_blank">copy</a><div style="position: absolute; left: 455px; top: 472px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" οnclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" target="_blank">print</a></span><a href="#" class="About" title="?" οnclick="dp.sh.Toolbar.Command('About',this);return false;" target="_blank">?</a></div></div><ol start="1" class="dp-cpp"><li class="alt"><span><span class="preprocessor">#include<iostream></span><span> </span></span></li><li class=""><span><span class="preprocessor">#include<queue></span><span> </span></span></li><li class="alt"><span><span class="preprocessor">#include<cstring></span><span> </span></span></li><li class=""><span><span class="preprocessor">#include<vector></span><span> </span></span></li><li class="alt"><span><span class="preprocessor">#include<string></span><span> </span></span></li><li class=""><span><span class="preprocessor">#include<algorithm></span><span> </span></span></li><li class="alt"><span><span class="preprocessor">#include<cstdio></span><span> </span></span></li><li class=""><span><span class="preprocessor">#include<cmath></span><span> </span></span></li><li class="alt"><span><span class="preprocessor">#include<set></span><span> </span></span></li><li class=""><span><span class="preprocessor">#include<cstdlib></span><span> </span></span></li><li class="alt"><span><span class="preprocessor">#include<stack></span><span> </span></span></li><li class=""><span><span class="keyword">typedef</span><span> </span><span class="datatypes">long</span><span> </span><span class="datatypes">long</span><span> LL; </span></span></li><li class="alt"><span><span class="keyword">const</span><span> </span><span class="datatypes">int</span><span> maxsize = 1e6+7; </span></span></li><li class=""><span><span class="keyword">using</span><span> </span><span class="keyword">namespace</span><span> std; </span></span></li><li class="alt"><span><span class="datatypes">int</span><span> Ans[maxsize]; </span></span></li><li class=""><span>LL D[maxsize]; </span></li><li class="alt"><span><span class="keyword">const</span><span> </span><span class="datatypes">int</span><span> mood = 998244353; </span></span></li><li class=""><span><span class="datatypes">bool</span><span> Prime[maxsize]; </span></span></li><li class="alt"><span>LL PrimeT[maxsize]; </span></li><li class=""><span><span class="datatypes">int</span><span> pcnt; </span></span></li><li class="alt"><span><span class="keyword">void</span><span> primeFun(</span><span class="datatypes">int</span><span> n)</span><span class="comment">//筛选法构造素数</span><span> </span></span></li><li class=""><span>{ </span></li><li class="alt"><span> pcnt = 0; </span></li><li class=""><span> Prime[0] = Prime[1] = 1; </span></li><li class="alt"><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> i=2;i*i<=n+1;i++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">if</span><span>(!Prime[i]) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> j=i+i;j<=n;j+=i) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> Prime[j] = 1; </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> i=0;i<=n;i++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">if</span><span>(!Prime[i]) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> PrimeT[pcnt++] = i; </span></li><li class=""><span> <span class="comment">//cout<<i<<" ";</span><span> </span></span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span>} </span></li><li class=""><span> </span></li><li class="alt"><span> </span></li><li class=""><span><span class="datatypes">int</span><span> main() </span></span></li><li class="alt"><span>{ </span></li><li class=""><span> <span class="comment">//freopen("finput.txt","r",stdin);</span><span> </span></span></li><li class="alt"><span> primeFun(1e6+1); </span></li><li class=""><span> <span class="datatypes">int</span><span> t; </span></span></li><li class="alt"><span> scanf(<span class="string">"%d"</span><span>,&t); </span></span></li><li class=""><span> <span class="keyword">while</span><span>(t--) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> LL l,r,k; </span></li><li class="alt"><span> scanf(<span class="string">"%lld%lld%lld"</span><span>,&l,&r,&k); </span></span></li><li class=""><span> LL n = r-l+1; </span></li><li class="alt"><span> fill(Ans,Ans+n,1);<span class="comment">//赋值为1</span><span> </span></span></li><li class=""><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> i=0;i<n;i++) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> D[i] = l+i; </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> i=0;i<pcnt;i++) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> LL primenow = PrimeT[i]; </span></li><li class="alt"><span> LL t = l/primenow; </span></li><li class=""><span> <span class="keyword">if</span><span>(l%primenow) t++; </span></span></li><li class="alt"><span> t *= primenow; </span></li><li class=""><span> <span class="keyword">for</span><span>(LL j=t-l;j<n;j+=primenow)</span><span class="comment">//算法的关键所在,应为是跳着取得,所以只有prime是这个数的因子的时候才进行操作</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="datatypes">int</span><span> cnt = 0; </span></span></li><li class="alt"><span> <span class="keyword">while</span><span>(D[j]%primenow==0) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> cnt++; </span></li><li class=""><span> D[j]/=primenow; </span></li><li class="alt"><span> } </span></li><li class=""><span> Ans[j] = (Ans[j]*(cnt*k+1))%mood; </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> LL sum = 0; </span></li><li class=""><span> <span class="keyword">for</span><span>(</span><span class="datatypes">int</span><span> i=0;i<n;i++) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span>(D[i]!=1)</span><span class="comment">//对于大于10^6的整数进行特殊处理</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> Ans[i] = (Ans[i]*(k+1))%mood; </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="comment">//cout<<Ans[i]<<" ";</span><span> </span></span></li><li class="alt"><span> sum = (sum+Ans[i])%mood; </span></li><li class=""><span> } </span></li><li class="alt"><span> printf(<span class="string">"%lld\n"</span><span>,sum); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">return</span><span> 0; </span></span></li><li class=""><span>} </span></li></ol></div><pre code_snippet_id="2516235" snippet_file_name="blog_20170803_1_2386237" name="code" class="cpp" style="display: none;"> #include<iostream>
#include<queue>
#include<cstring>
#include<vector>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<set>
#include<cstdlib>
#include<stack>
typedef long long LL;
const int maxsize = 1e6+7;
using namespace std;
int Ans[maxsize];
LL D[maxsize];
const int mood = 998244353;
bool Prime[maxsize];
LL PrimeT[maxsize];
int pcnt;
void primeFun(int n)//筛选法构造素数
{
pcnt = 0;
Prime[0] = Prime[1] = 1;
for(int i=2;i*i<=n+1;i++)
{
if(!Prime[i])
{
for(int j=i+i;j<=n;j+=i)
{
Prime[j] = 1;
}
}
}
for(int i=0;i<=n;i++)
{
if(!Prime[i])
{
PrimeT[pcnt++] = i;
//cout<<i<<" ";
}
}
}
int main()
{
//freopen("finput.txt","r",stdin);
primeFun(1e6+1);
int t;
scanf("%d",&t);
while(t--)
{
LL l,r,k;
scanf("%lld%lld%lld",&l,&r,&k);
LL n = r-l+1;
fill(Ans,Ans+n,1);//赋值为1
for(int i=0;i<n;i++)
{
D[i] = l+i;
}
for(int i=0;i<pcnt;i++)
{
LL primenow = PrimeT[i];
LL t = l/primenow;
if(l%primenow) t++;
t *= primenow;
for(LL j=t-l;j<n;j+=primenow)//算法的关键所在,应为是跳着取得,所以只有prime是这个数的因子的时候才进行操作
{
int cnt = 0;
while(D[j]%primenow==0)
{
cnt++;
D[j]/=primenow;
}
Ans[j] = (Ans[j]*(cnt*k+1))%mood;
}
}
LL sum = 0;
for(int i=0;i<n;i++)
{
if(D[i]!=1)//对于大于10^6的整数进行特殊处理
{
Ans[i] = (Ans[i]*(k+1))%mood;
}
//cout<<Ans[i]<<" ";
sum = (sum+Ans[i])%mood;
}
printf("%lld\n",sum);
}
return 0;
}
</pre><br>
<br>
<p></p>
<p><br>
</p>
<p><br>
</p>
</div>
多校第四场 1003 HDU 6069 素数晒应用
最新推荐文章于 2023-07-30 16:07:39 发布